文章目录
- 1.Java有哪些数据类型
- 2.Java中引用数据类型有哪些,它们与基本数据类型有什么区别?
- 3.Java中的自动装箱与拆箱
- 4.为什么要有包装类型?
- 5.a=a+b与a+=b有什么区别吗?
1.Java有哪些数据类型
8种基本数据类型:
- 6种数字类型(4个整数型,两个浮点型)byte、short、int、long、float、double
- 1种字符类型:char
- 1种布尔类型 :boolean
byte:
- byte数据类型是8位、有符号的,以二进制补码表示的整数
- 最小值-128(-2^7)
- 最大值127(2^7-1)
- 默认值为0
- byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一;
- 1 byte = 1字节 = 8bit 可表达 2的八次方个数字
1 short= 2字节 = 16bit 可表达2的十六次方个数字
1 int = 4字节 = 32bit 可表达2的32次方 - 如果考虑符号位,最大值就要减1
short:
- short类型16位,有符号的,以二进制补码表示的整数
- 最小值-32768(-2^15)
- 最大值32767(2^15-1)
- Short 数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一;
- 默认值是0
int:
- int类型32位,有符号的,以二进制补码表示的整数
- 最小值-21,4748,3648(-2^31)
- 最大值21,4748,3647(2^31-1)
- 默认值为0
long:
-
**注意:**Java 里使用 long 类型的数据一定要在数值后面加上 L,否则将作为整型解析
-
long 数据类型是 64 位、有符号的以二进制补码表示的整数;
-
最小值是 -9,223,372,036,854,775,808(-2^63);
-
最大值是 9,223,372,036,854,775,807(2^63 -1);
-
这种类型主要使用在需要比较大整数的系统上;
-
默认值是 0L;
float
-
float 数据类型是单精度、32位、符合IEEE 754标准的浮点数;
-
float 在储存大型浮点数组的时候可节省内存空间;
-
默认值是 0.0f;
-
浮点数不能用来表示精确的值,如货币!;
double
-
double 数据类型是双精度、64 位、符合IEEE 754标准的浮点数;
-
浮点数的默认类型为double类型;
-
double类型同样不能表示精确的值,如货币;
-
默认值是 0.0d;
char
-
char类型是一个单一的 16 位 Unicode 字符;
-
最小值是 \u0000(即为 0);
-
最大值是 \uffff(即为 65535);
-
char 数据类型可以储存任何字符;
boolean
-
boolean数据类型表示一位的信息;
-
只有两个取值:true 和 false;
-
这种类型只作为一种标志来记录 true/false 情况;
-
默认值是 false;
这八种基本类型都有对应的包装类分别为:Byte、Short、Integer、Long、Float、Double、Character、Boolean
2.Java中引用数据类型有哪些,它们与基本数据类型有什么区别?
引用数据类型分3种:类,接口,数组;
从概念方面来说
1,基本数据类型:变量名指向具体的数值
2,引用数据类型:变量名不是指向具体的数值,而是指向存数据的内存地址。
从内存的构建方面来说(内存中,有堆内存和栈内存两者)
1,基本数据类型:被创建时,在栈内存中会被划分出一定的内存,并将数值存储在该内存中.
2,引用数据类型:被创建时,首先会在栈内存中分配一块空间,然后在堆内存中也会分配一块具体的空间用来
存储数据的具体信息,即hash值,然后由栈中引用指向堆中的对象地址.
从使用方面来说
1,基本数据类型:判断数据是否相等,用==和!=判断。
2,引用数据类型:判断数据是否相等,用equals()方法,==和!=是比较数值的。而equals()方法是比较内存
地址的。
3.Java中的自动装箱与拆箱
参考这位博主hh
https://blog.csdn.net/swadian2008/article/details/128290566
4.为什么要有包装类型?
让基本数据类型也具有对象的特征
为了让基本类型也具有对象的特征,就出现了包装类型(如我们在使用集合类型Collection时就一定要使
用包装类型而非基本类型)因为容器都是装object的,这是就需要这些基本类型的包装器类了。
自动装箱: new Integer(6); ,底层调用: Integer.valueOf(6)
自动拆箱: int i = new Integer(6); ,底层调用 i.intValue(); 方法实现。
二者的区别:
- 声明方式不同:基本类型不使用new关键字,而包装类型需要使用new关键字来在堆中分配存储空
间;
- 存储方式及位置不同:基本类型是直接将变量值存储在栈中,而包装类型是将对象放在堆中,然后
通过引用来使用;
-
初始值不同:基本类型的初始值如int为0,boolean为false,而包装类型的初始值为null;
-
使用方式不同:基本类型直接赋值直接使用就好,而包装类型在集合如Collection、Map时会使用
到。
5.a=a+b与a+=b有什么区别吗?
+=
操作符会进行隐式自动类型转换,此处a+=b隐式的将加操作的结果类型强制转换为持有结果的类型,而
a=a+b则不会自动进行类型转换.如:
byte a = 127;
byte b = 127;
b = a + b; // 报编译错误:cannot convert from int to byte
b += a;
以下代码是否有错,有的话怎么改?
short s1= 1;
s1 = s1 + 1;
有错误.short类型在进行运算时会自动提升为int类型,也就是说 s1+1 的运算结果是int类型,而s1是short
类型,此时编译器会报错.
正确写法
short s1= 1;
s1 += 1;
码是否有错,有的话怎么改?
short s1= 1;
s1 = s1 + 1;
有错误.short类型在进行运算时会自动提升为int类型,也就是说 s1+1 的运算结果是int类型,而s1是short
类型,此时编译器会报错.
正确写法
short s1= 1;
s1 += 1;
+=
操作符会对右边的表达式结果强转匹配左边的数据类型