值类型数据和引用类型数据
2015-07-16 13:56
155 查看
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比较并不相等.这是两个引用类型数据的
比较.并且一个地址在常量池,一个在堆中.
所以判断的时候,先看两个比较的个体.最终比较的值,还是对象(地址).
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比较并不相等.这是两个引用类型数据的
比较.并且一个地址在常量池,一个在堆中.
所以判断的时候,先看两个比较的个体.最终比较的值,还是对象(地址).
相关文章推荐
- CATALOG DATABASE command
- C++虚基类
- 阿里音乐:前脚送走刘春宁,后脚迎来高晓松(咱不谈颜值,只聊音
- 普通视图和物化视图的区别
- Unity3D研究院之通过C#使用Advanced CSharp Messenger(五十)
- Linux下Web服务器环境搭建LNMP一键安装包 v2.6
- 股市成本
- 拓扑排序还能这么写 zoj 2997
- poj 2762 Going from u to v or from v to u? (推断它是否是一个薄弱环节图)
- Android学习之播放背景音乐
- 项目开发之插件的安装 分类: ios开发 2015-07-16 13:56 183人阅读 评论(0) 收藏
- 大一下學期學習生活總結
- GRE写作必备句型
- MR21 VS MR22 对CKMLCP结果影响
- Activity生命周期的回调,你应该知道得更多!--Android源码剖析(下)
- ArrayList和Vector的扩容机制
- selenium2入门 用Yaml文件进行元素管理 (五)
- spring ApplicationContextAware接口介绍
- Spark中的序列化机制
- 获取系统时间