Java基础(2)
Java数据类型
基本数据类型
数值型:
整数类型:byte(字节)、short、int、long
浮点类型:float(单精度)、double(双精度)
字符型:char
布尔型:boolean
引用数据类型
类:class
接口:interface
数组:[]
| 类型 | 占用内存 | 取值范围 |
|---|---|---|
| byte | 1字节 | -128~127 |
| short | 2字节 | -32768~32767 |
| int | 4字节 | -2147483648~2147483647 |
| long | 8字节 | -9223372036854775808L~9223372036854775807L |
| float | 4字节 | +/-3.4E+38F(6~7 个有效数字) |
| double | 8字节 | +/-1.8E+308 (15 个有效数字) |
| char | 2字节 | 单字符 |
| boolean | 1字节 | true or false |
包装类型
Boolean, Character, Byte, Short, Integer, Long, Float, Double
基本数据类型和包装类型的区别
报装类型可以为null,基本类型不可以
包装类型可用于泛型,基本类型不可以
List<int> list=new ArraList<>();//提示 Syntax error,insert "Dimensions' to complete ReferenceType List<Integer>list =new ArrayList<>(); //按绝对值排序 int[] arr = {-11, 2, 3, 4, 5, 6, 7, 8, 9}; Arrays.sort(arr, (a, b) -> Math.abs(a) - Math.abs(b));//报错 Integer[] arr = {-11, 2, 3, 4, 5, 6, 7, 8, 9}; Arrays.sort(arr, (a, b) -> Math.abs(a) - Math.abs(b));**基本类型比包装类型更高效。**基本类型在栈中直接存储的具体数值,而包装类型则存储的是堆中的引用。
包装类型的缓存机制
Integer i1 = 1;
Integer i2 = 1;
System.out.println(i1 == i2);// 输出 true
Integer i1 = 129;
Integer i2 = 129;
System.out.println(i1 == i2);// 输出 false
当Integer在-128~127赋值,对象会从缓存中获取
自动装箱和拆箱
装箱:将基本数据类型重新转化为包装类型
Integer a=0;
//解析为Integer a=Integer.valueOf(0);
拆箱:将包装类型转化为基本类型
Integer a=0;
a++;//含隐式的拆箱
数据操作
自增++和+=
**++:**当运算符放在变量之前时(前缀),先自增/减,再赋值;当运算符放在变量之后时(后缀),先赋值,再自增/减
**+=:**表示为自身再加
a=a+b与a+=b有什么区别吗?
byte a = 127; byte b = 127; b = a + b; // 报编译错误:cannot convert from int to byte b += a;//编译为b=(short)(a+b)
移位
<< :左移运算符,向左移若干位,高位丢弃,低位补零。
x << 1,相当于 x 乘以 2(不溢出的情况下)。
>> :带符号右移,向右移若干位,高位补符号位,低位丢弃。正数高位补 0,负数高位补 1。
x >> 1,相当于 x 除以 2。
>>> :无符号右移,忽略符号位,空位都以 0 补齐。