目录
1、String类型是基本数据类型还是引用类型?基本数据类型和引用类型有什么区别?
java的数据类型分为两大类:
- 基本数据类型 :包括 整数 、 浮点数 、 字符 、 布尔 。
- 引用数据类型 :包括 类 、 接口类型、 数组类型、 枚举类型、 注解类型、 字符串型
一、基本数据类型知识点
①整数类型:long、int、short、byte
②浮点类型:float、double
③字符类型:char
④布尔类型:boolean
Java中的默认类型:整数类型是 int 、浮点类型是 double 。
数据类型 | 关键字 | 内存占用 | 取值范围 | 默认值 |
字节型 | byte | 1个字节 | -128~127 | 0 |
短整型 | short | 2个字节 | -32768~32767 | 0 |
整型 | int(默认) | 4个字节 | -231次方~2的31次方-1 | 0 |
长整型 | long | 8个字节 | 2的63次方~2的63次方-1 | 0 |
单精度浮点数 | float | 4个字节 | 1.4013E-45~3.4028E+38 | 0.0 |
双精度浮点数 | double(默认) | 8个字节 | 4.9E-324~1.7977E+308 | 0.0 |
字符型 | char | 2个字节 | 0-65535 | '\u0000' |
布尔类型 | boolean | 1个字节 | true,false | false |
二、相关问题
1、String类型是基本数据类型还是引用类型?基本数据类型和引用类型有什么区别?
第一个问题:String类型当然是引用类型
第二个问题:基本数据类型和引用类型的区别
- 引用数据类型拥有行为和属性,而基本数据类型没有
- 在方法里定义的局部变量(基本数据类型)的具体内容是存放在栈空间中的,而引用数据类型的变量
其具体内容存储 在堆空间,栈空间存放的是其引用(内存地址)
public static void main(String[] args){
//基本数据类型
int i=1;
double d=1.2;
//引用数据类型
String str="helloworld";
}
内存 存放位置图例:
- 在方法里定义的局部变量(基本数据类型),调用其他方法时作为参数按数值传递的
而引用数据类型变量,调用方法时作为参数是按引用传递的
- 引用数据类型的==是比较双方的地址值,而基本数据类型==是比较数据值
2、以下代码输出的结果对不对,有什么原因
Integer a = new Integer(1);
Integer b = new Integer(1);
Integer c = 1;
Integer d = 1;
Integer e = 128
Integer f = 128;
System.out.println(a==b); -- true
System.out.println(c==d); -- true
System.out.println(e==f); -- true
1、System.out.println(a==b); 结果为false,由上可知a和b是引用数据类型,而引用数据类型的==比较的是地址值,
a和b的引用不是指向同一个对象,因此结果为false
2、System.out.println(c==d); 结果为true
Integer c = 1; 是个自动装箱装箱的过程,相当于 Integer c = Integer.valueOf(1),
自动装箱的数据是放在缓冲区的, 对于-128~127之间的创建是从缓冲区获取,所以c和d是相等的。源码如下
// IntegerCache.low = -128
// IntegerCache.high = 127
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
3、 System.out.println(e==f); 结果为false, Integer e = 128这种自动装箱过程是要重新new的,所以e和f内存地址不同