Integer s=new Integer(9);
Integer t=new Integer(9);
Long u=new Long(9);
 
 
(s==t) 这个是错的,只要有new这个关键字,就是开辟空间,用的是引用



Integer s =9;
Integer t =9;
(s==t) 这个是对的,在【-128,127】有缓存,指向同一个引用



  • int和int之间,用==比较,肯定为true。基本数据类型没有equals方法
  • int和Integer比较,Integer会自动拆箱,== 和 equals都肯定为true
  • int和new Integer比较,Integer会自动拆箱,调用intValue方法, 所以 == 和 equals都肯定为true
  • Integer和Integer比较的时候,由于直接赋值的话会进行自动的装箱。所以当值在[-128,127]中的时候,由于值缓存在IntegerCache中,那么当赋值在这个区间的时候,不会创建新的Integer对象,而是直接从缓存中获取已经创建好的Integer对象。而当大于这个区间的时候,会直接new Integer。
    当Integer和Integer进行==比较的时候,在[-128,127]区间的时候,为true。不在这个区间,则为false
    当Integer和Integer进行equals比较的时候,由于Integer的equals方法进行了重写,比较的是内容,所以为true

  • Integer和new Integer : new Integer会创建对象,存储在堆中。而Integer在[-128,127]中,从缓存中取,否则会new Integer.
    所以 Integer和new Integer 进行==比较的话,肯定为false ; Integer和new Integer 进行equals比较的话,肯定为true

  • new Integer和new Integer进行==比较的时候,肯定为false ; 进行equals比较的时候,肯定为true
    原因是new的时候,会在堆中创建对象,分配的地址不同,==比较的是内存地址,所以肯定不同

  • 装箱过程是通过调用包装器的valueOf方法实现的
    拆箱过程是通过调用包装器的xxxValue方法实现的(xxx表示对应的基本数据类型)

  • 总结:Byte、Short、Integer、Long这几个类的valueOf方法实现类似的。所以在[-128,127]区间内,==比较的时候,值总是相等的(指向的是同一对象),在这个区间外是不等的。
    而Float和Double则不相等, Boolean的值总是相等的

最新文章

  1. ESLint 规则
  2. knockoutJS学习笔记06:ko数组与模板绑定
  3. win下命令行替代品Cmder
  4. 省市二级联动(原生JS)
  5. git clone 失败问题解决方案
  6. ls常用参数
  7. POJ 4047 Garden 线段树 区间更新
  8. 软件工程 speedsnail 冲刺5
  9. smarty第一天
  10. delphi 博客地址收藏
  11. Ubuntu 查看文件以及磁盘空间大小命令df
  12. 关于Windows文件名和路径名的那些事
  13. 『重构--改善既有代码的设计』读书笔记----Replace Data Value with Object
  14. 5、第5节课CSS补充和html 标签讲解20150924
  15. 【Python&Sort】QuickSort
  16. angularjs下拉框空白
  17. 【汇编语言】Win10 安装 DOXBox0.74
  18. html之css选择器学习
  19. vue 版本升级配置修改
  20. 软件工程(GZSD2015)学生博客列表

热门文章

  1. google chrome安装非官方市场插件方法
  2. 破晓行动----带你总结JVM的知识大全(二)
  3. Salesforce LWC学习(二十七) File Upload
  4. SpringBoot-04-自动配置原理再理解
  5. python在一个画布上画多个子图
  6. C++ CComboBox控件详解
  7. JVM 常见线上问题 → CPU 100%、内存泄露 问题排查
  8. java安全编码指南之:lock和同步的正确使用
  9. 洛谷 P3413 【萌数】
  10. 多测师讲解jmeter _接口请求_(003)高级讲师肖sir