当前仓库属于暂停状态,部分功能使用受限,详情请查阅 仓库状态说明
1 Star 2 Fork 0

Kaz / prolearn
暂停

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
data_type.md 9.75 KB
一键复制 编辑 原始数据 按行查看 历史
Kaz 提交于 2020-10-05 12:58 . 存储和寄存器

一.变量的定义和使用

定义变量

Java 是强类型语言,变量必须先定义再使用。

变量的类型是确定的,不可改变。

int a = 1;
a = 2;

!> 变量定义时可以在后面赋值而不初始化。但没有值的变量不允许被使用。

定义常量

使用 final 修饰符定义一个常量。常量在初始化后不可重新赋值。

final int a = 1;

var 关键字

使用var关键字时,编译器会根据表达式的值推断出变量的类型。

var v = 233; //int

二.基本数据类型

值类型与引用类型

值类型:

分类 类型名
整数 byte,short,int,long
浮点数 float,double
字符 char
布尔 boolean

除这些类型外,剩下的都是引用类型。 引用类型的变量类似于C语言的指针,它内部存储一个“地址”。

基本类型包装成引用类型

基本类型 对应的引用类型
boolean java.lang.Boolean
byte java.lang.Byte
short java.lang.Short
int java.lang.Integer
long java.lang.Long
float java.lang.Float
double java.lang.Double
char java.lang.Character
  1. 所有对应引用类型都是不变类
  2. 所有的整数和浮点数的包装类型都继承自 Number,可以通过包装类型获取任意基本类型。 Number num = new Integer(999);
  3. 自动装箱和自动拆箱:
    • 发生时期:编译期
    • 功能:基本类型和对应的引用类型可以自动转换。

整数类型

整数类型的大小

类型 占用字节 范围
byte 1 -128~127
short 2 -32768~32767
int 4 -2147483648 ~ 2147483647
long 8 -9223372036854775808 ~ 9223372036854775807

合法的整数格式

同一个数的不同进制的表示是完全相同的

  1. 正数
  2. 负数
  3. 二进制表示 0b1001
  4. 八进制表示 023456
  5. 十六进制表示 0xac
  6. 带下划线的数字 2_000_000_000
  7. 长整型后缀 123L
        int i;
        i = 123456;//正数
        i = -123456;//复数
        i = 0b10010101;//二进制
        i = 023456;//八进制
        i = 0xac; //十六进制
        i = 2_000_000_000; //数字之间可以加下划线,方便表示
        long l = 123L; //末尾加L用来表示长整型

浮点型

浮点类型的大小

类型 占用字节 范围
float 4 $3.4 \times 10^38$
double 8 $1.79 \times 10^308$

合法的浮点数格式

  1. 正数
  2. 负数
  3. 指数形式 1.5e6
  4. 单精度后缀 1.5e3f
  5. NaN表示Not a Number
  6. Infinity表示无穷大,-Infinity表示负无穷大
        float f1 = 1.5f;
        double d2 = 1.3;
        double d3 = 1.5e8;

!> 1.51e1.5等格式默认是 double 型,不可以直接赋值给 float型。float型的初始值一般需要加上 f后缀。

布尔型

布尔类型的大小

Java语言对布尔类型的存储并没有做规定,因为理论上存储布尔类型只需要1 bit,但是通常JVM内部会把boolean表示为4字节整数。

合法的布尔表示

true false

        boolean b1 = true;
        boolean b2 = false;

字符型

字符类型char表示一个字符,占用2个字节。Java的char类型除了可表示标准的ASCII外,还可以表示一个Unicode字符。可以把字符型字面量赋给整数。

!> 字符类型只能使用 '' 且只能表示一个字符。

        char c1 = '1';
        char c2 = '啊';

null

引用类型的变量可以指向一个空值 null,它表示不存在,即该变量不指向任何对象。

String s1 = null;

类型转换

  1. 其他类型转换成字符串 String.valueOf(基本类型或引用类型)
  2. 转换成整数 Integer.parseInt(字符串,进制=10)
  3. 转换成 boolean `Boolean.parseBoolean(字符串)
  4. 转换成字符数组 str1.toCharArray()
  5. 字符数组转字符串 new String(charArray)

编码

  1. 转换成其他编码 str1.getBytes(编码名称)
  2. 编码 new String(byteArray, 编码名称)

三.运算符

算术运算和位运算

Java支持大多数C语言支持的整数和浮点数计算。

运算符 目数 功能 示例
+ 单目 正号 +2
+ 二目 加法 1+2
- 单目 负号 -2
- 二目 减法 1-2
* 二目 乘法 1*3
/ 二目 除法,整数除法只会得到整数,浮点数除法得到浮点数 1/3=0,1/5.0=2.0
% 二目 求余,仅限整数 1%3
+=,-=,*=,/=,%= 二目 复合赋值运算符 int i = 0; i+=5;
++ 单目 前置自增 int i = 0; ++i得到1
++ 单目 后置自增 int i = 0; i++得到0
-- 单目 前置自减 int i = 0; --i得到-1
-- 单目 后置自减 int i = 0; i--得到0
<< 二目 左移位,不影响正负性 2<<3得到8
>> 二目 右移位,不影响正负性 8>>3得到2
>>> 二目 右移位,结果为非负数 8>>>3得到2
& 二目 与运算,两个数均不为0时得到1 1&0得到0,1&1得到1
| 二目 或运算,两个数中任意一个不为0时得到1 1|0得到1,0|0得到0
~ 单目 非运算,非零数变为0,0变为1 ~10得到0,~0得到1
^ 双目 异或运算,相同的两个数结果为0,不同的为1 1^1得到0,1^0得到1

!> 整数的除法对于除数为0时运行时将报错,但编译不会报错。而浮点数除数为0时得到 NaNInfinity

!> 溢出的计算结果不会报错

关系运算

  • 比较运算符:>>=<<===!=
  • 与运算 &&
  • 或运算 ||
  • 非运算 !
  • 三元运算 b ? x : y
  1. 与运算和或运算具有短路特性。

  2. 当两个值类型比较时,比较值;当两个引用类型比较时,比较两个引用是否指向同一个对象(相当于判断指针是否相等)。

  3. 判断引用类型的变量是否相等,需要使用 equals 方法。

    !> 当 s1null 时,会出现NullPointerException异常。

        String s1 = "hi";
        String s2 = "HI".toLowerCase();
        System.out.println(s1 == s2); //false
        System.out.println(s1.equals(s2)); //true

字符串

  1. 使用 + 可以进行字符串的连接。 如果用+连接字符串和其他数据类型,会将其他数据类型先自动转型为字符串,再连接。

  2. 字符串比较 使用 equals方法:s1.equals(s2)

运算符优先级

在Java的计算表达式中,算术运算和位运算优先级从高到低依次是:

  • ()
  • ! ~ ++ --
  • * / %
  • + -
  • << >> >>>
  • &
  • |
  • += -= *= /=

关系运算的优先级:

  • !
  • >>=<<=
  • ==!=
  • &&
  • ||

类型转换

  1. 在运算过程中,如果参与运算的两个数类型不一致,那么计算结果为较大类型的整型。
  2. 强制类型转换: (类型) 变量

四.字符串

概述

  1. 字符串类型只能使用 "" 表示。
  2. 字符串是不可变的。
  3. 字符串是引用类型。
String s1 = "hellp";

从Java 13开始,字符串可以用"""..."""表示多行字符串,且多行字符串前面共同的空格会被去掉。 编译时,命令行需要加上 -enable-preview 后缀

String s = """ 
           SELECT * FROM
             users
           WHERE id > 100
           ORDER BY name DESC""";

常用操作

是否相等

  1. 判断值相等:str1.equals(str2)
  2. 忽略大小写,判断值相等:str1.equalsIgnoreCase(str2)

子串

  1. 找子串 str1.contains(str2)
  2. 提取子串 str1.substring(起始位置,终止位置) 范围为 [起始位置, 终止位置)

空白字符

  1. 去除空白字符:str1.trim() ,空白字符包括空格,\t\r\n
  2. 是否为空字符串 str1.isEmpty()
  3. 是否是空白字符串 str1.isBlank()

替换、分割和拼接

  1. 替换 str1.replace(要替换的字符串, 目标字符串)
  2. 分割 str1.split(分隔符),返回字符串数组。
  3. 拼接 str1.join(字符串数组) 会以 str1 为分隔符将数组连接起来。
  4. 使用 + 直接拼接两个字符串。

格式化

  1. str1.formatted(数据...)
  2. String.format(字符串,数据...)
String s = "Hi %s, your score is %d!";
System.out.println(s.formatted("Alice", 80));

五.数组

1.定义一个数组

  1. 使用int[]new定义数组
int[] arr = new int[2] {0,1}
  1. 使用 {} 定义数组。长度根据{} 内元素个数判断。
int[] arr = {0,1}
  1. 定义高维数组

    由于数组是引用类型,所以二维部分的长度可以不同。

int [][] arr1 = {{0,1,2},{3,4,5,6,7,8}}
  1. 数组所有元素初始化为默认值,整型都是0,浮点型是0.0,布尔型是false
  2. 数组一旦创建后,大小就不可改变。
int[] arr = new int[2]
arr[0] = 1;
arr[1] = 2;

2.数组长度

使用 length 属性获取数组长度。

System.out.println(arr.length);

3.输出整个数组

  1. 一维数组:引入包java.util.Arrays,使用 Arrays.toString将数组转换为字符串。
  2. 高维数组:引入包java.util.Arrays,使用 Arrays.deepToString将数组转换为字符串。
System.out.println(Arrays.toString(arr))

4.数组排序

引入包java.util.Arrays,使用 Arrays.sort进行升序排序。

Arrays.sort(arr)
1
https://gitee.com/pikoyo/prolearn.git
git@gitee.com:pikoyo/prolearn.git
pikoyo
prolearn
prolearn
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891