Java基础(2)

152 阅读2分钟

Java基础(2)

Java数据类型

基本数据类型

数值型:
	整数类型:byte(字节)、short、int、long
	浮点类型:float(单精度)、double(双精度)
字符型:char
布尔型:boolean

引用数据类型

类:class
接口:interface
数组:[]
类型占用内存取值范围
byte1字节-128~127
short2字节-32768~32767
int4字节-2147483648~2147483647
long8字节-9223372036854775808L~9223372036854775807L
float4字节+/-3.4E+38F(6~7 个有效数字)
double8字节+/-1.8E+308 (15 个有效数字)
char2字节单字符
boolean1字节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 补齐。