


全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
代码为:1 public class Test 2 public static void main(String args) 3 4 Integer a = 1; 5 Integer b = 2; 6 Integer c = 3; 7 Integer d = 3; 8 Integer e = 321; 9 Integer f = 321; 10 Long g = 3l; 11 System.out.println(c=d); /true 结果1 12 System.out.println(e=f); /false 结果2 13 System.out.println(c.equals(a+b); /true 结果3 14 System.out.println(g=(a+b); /true 结果4 15 System.out.println(g.equals(a+b); /false 结果5 16 17 输出结果在代码注释部分,我们来看看18 public class Test 19 20 21 public Test() 22 23 24 25 public static void main(String args) 26 27 Integer a = Integer.valueOf(1); 28 Integer b = Integer.valueOf(2); 29 Integer c = Integer.valueOf(3); 30 Integer d = Integer.valueOf(3); 31 Integer e = Integer.valueOf(321); 32 Integer f = Integer.valueOf(321); 33 Long g = Long.valueOf(3L); 34 System.out.println(c = d); 35 System.out.println(e = f); 36 System.out.println(c.equals(Integer.valueOf(Value() + Value(); 37 System.out.println(g.longValue() = (long)(Value() + Value(); 38 System.out.println(g.equals(Integer.valueOf(Value() + Value(); 39 40 在分析前,我们先看看 = 和equals 的区别:= 在操作数是基本数据类型时,是比较值是否相等,在操作数是引用类型时,比较的是是否指向堆中同一个对象。equals是object的普通方法,object是所有类的基类,不同的类,重写equals的方法不同,基本数据类型当然没这个方法咯,在引用类型的时候,比较的东西得你自己去重写,你想比较神马就比较神马,Integer的equals就是比较的被赋予的值(一般都是比较这个,String也是)。Integer的equals源代码如下:41 public boolean equals(Object obj) 42 if (obj instanceof Integer) 43 return value = (Integer)obj).intValue(); 44 45 return false; 46 -分割线-47 System.out.println(c=d); /true 48 System.out.println(e=f); /false 上面2句代码,第一句,2个对象比较,比较的是c和d是否指向同一个Integer对象,结果是true(我本以为是false),那么就是说指的是同一个对象咯?奇怪啊,不会吧,不是生产了2个Integer对象吗?难道在装箱的时候,搞什么鬼了?我们看看装箱代码(自动装箱其实就是编译器编译的时候,自动帮你把int变成Integer对象,调用的是Integer的静态方法valueOf(),看反编译过来的代码就可以看出):49 public static Integer valueOf(int i) 50 if(i = -128 & i = IntegerCache.high) 51 return IntegerCache.cachei + 128; 52 else 53 return new Integer(i); 54 上面的代码可以看出,当你调用这个方法,把int变成Integer的时候,是有规则的,当你的int的值在-128-IntegerCache.high(127) 时,返回的不是一个新new出来的Integer对象,而是一个已经缓存在堆中的Integer对象,(我们可以这样理解,系统已经把-128到127之间的Integer缓存到一个Integer数组中去了,如果你要把一个int变成一个Integer对象,首先去缓存中找,找到的话直接返回引用给你就行了,不必再新new一个)。这样我们就能解释为什么c和d是指向同一个对象了(c和d的int值是3),而e和f则引用的2个不同Integer对象,因为他们的值是321。作者说“包装类的=操作在没有遇到算术运算的情况下,不会自动拆箱”从结果1、2、4的反编译代码可以得出结论,(其实,我们可以从另一个方面解释为什么不会自动拆箱。当=2边是包装类的时候,其实包装类就是对象,比较的是2个对象引用是否指向同一个对象,如果2边有一个是基本数据类型的话,那么就是比较值大小,这个优先级更高,既然是比较值大小,那么自然另一边的包装类就要拆箱成基本类型进行比较值大小了)“它们的equals方法不会处理数据类型转型的关系” 从结果4、5可以看出,因为如果会处理数据类型转换的话,那么5的结果就是true了。看下long的equals的源代码:55 public boolean equals(Object obj) 56 if (obj instanceof Long) 57 return value = (Long)obj).longValue(); 58 59 return false; 60 首先就判断一下,你是不是Long类型,如果不是,比都别比 ,直接返回false。61 System.out.println(g.equal
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年热压氮化硼制品项目建议书
- 2025年染料类项目合作计划书
- 2025年耐高温滤料项目合作计划书
- 202520加工订货合同范本
- 2025水电改造合同范本
- 2025年民营医疗服务合作协议书
- 学校秋季志愿服务活动计划
- 幼儿园教师的专业发展计划
- 运输行业工作安排步骤计划
- 音乐演奏与合作创作社团工作计划
- 2025年陕西农业发展集团有限公司(陕西省土地工程建设集团)招聘(200人)笔试参考题库附带答案详解
- 2025年03月中央社会工作部所属事业单位公开招聘11人笔试历年参考题库考点剖析附解题思路及答案详解
- 2025年中高端女装市场趋势与前景深度分析
- 2025北京清华附中高三(下)统练一数学(教师版)
- 2025-2030中国孵化器行业市场发展前瞻及投资战略研究报告
- 5.3基本经济制度 课件 2024-2025学年统编版道德与法治八年级下册
- Unit4 Breaking Boundaries 单元教学设计-2024-2025学年高中英语外研版(2019)选择性必修第二册
- T-CCTAS 61-2023 桥梁承重缆索抗火密封综合防护技术规程
- 2025慢性阻塞性肺病(GOLD)指南更新要点解读课件
- 2024年05月湖北中国邮政储蓄银行湖北省分行春季校园招考笔试历年参考题库附带答案详解
- 铁路行车组织 课件 项目4 调车工作
评论
0/150
提交评论