值类型数据和引用类型数据

来源:互联网 发布:淘宝如何入驻拼多多 编辑:程序博客网 时间:2024/05/20 10:11

1.java 中有8种基本数据类型:

boolean,char,byte,short,int,long,float,double

对应的封装类:

Boolean,Character,Byte,Short,Integer,Long,Float,Double

前者属于值类型数据,后者属于引用类型数据,引用类型数据存于堆或常量池中.值类型数据存在于常量池中,声明存在于栈中.


2.值类型数据比较的时候会隐式转换为高阶的数据类型,然后再比较:

System.out.println(1==1);//true

System.out.println(1.0 == 1);//true


3.值类型数据和引用类型数据进行比较的时候,引用类型数据会自动拆箱为值类型数据

System.out.println(1 == new Double(1.0));//true

new Double 先拆箱为double x = 1.0.然后比较.

4.引用类型数据比较的是地址:

System.out.println(new Double(1.0) == new Double(1.0));//false

1>不同类型的封装类之间不能比较,因为不兼容,不能直接转换.

(Integer)(new Double(1.0)) //编译报错

(Double)(new Integer(1))//编译报错

2>父类和封装类可以互相转换,且转换后的对象只能调用它们公共的属性和方法

(Number)(new Double(1.0))//Number是一个抽象类

(Integer)(new Object())//只能调用notify(),wait()等方法

(Number)(new Object())//只能调用notify(),wait()等方法

(Object)(new Integer(1))//只能调用notify(),wait()等方法

5.String不是封装类,它的值存在于字符串池中,也就是常量池.低阶的值的封装类对象也存在于常量池,所以下面的都是对的.

String a = "abc",b= "abc";

Integer i = 127 ,j = 127;

a == b ,i == j;// true true

所以Integer k = new Integer(127);//在堆中.跟i,j比较并不相等.这是两个引用类型数据的

比较.并且一个地址在常量池,一个在堆中.



所以判断的时候,先看两个比较的个体.最终比较的值,还是对象(地址).


0 0
原创粉丝点击