Integer常量池

问题1
public class Main_1 {
public static void main(String[] args) {
Integer a = 1;
Integer b = 2;
Integer c = 3;
Integer d = 3;
Integer e = 321;
Integer f = 321;
Long g = 3L;
Long h = 2L;
System.out.println(c == d);
System.out.println(e == f);
System.out.println(c == (a + b));
System.out.println(c.equals(a + b));
System.out.println(g == (a + b));
System.out.println(g.equals(a + b));
System.out.println(g.equals(a + h));
} } // 结果
true
false
true
true
true
false
true
问题2
public class Main {
public static void main(String[] args) { Integer i1 = 100;
Integer i2 = 100;
Integer i3 = 200;
Integer i4 = 200; System.out.println(i1==i2);
System.out.println(i3==i4);
}
} //结果
true
false
问题3
public class Main {
public static void main(String[] args) { Double i1 = 100.0;
Double i2 = 100.0;
Double i3 = 200.0;
Double i4 = 200.0; System.out.println(i1==i2);
System.out.println(i3==i4);
}
}
//结果
false
false
解释
  • 使用==的情况:

    如果比较Integer变量,默认比较的是地址值。

    Java的Integer维护了从-128~127的缓存池

    如果比较的某一边有操作表达式(例如a+b),那么比较的是具体数值

  • 使用equals()的情况:

    无论是Integer还是Long中的equals()默认比较的是数值。

    Long的equals()方法,JDK的默认实现:会判断是否是Long类型

  • a+b包含了算术运算,因此会触发自动拆箱过程

  • Integer常量池

    • Integer中有个静态内部类IntegerCache,里面有个cache[],也就是Integer常量池,常量池的大小为一个字节(-128~127)。
    • 当创建Integer对象时,不使用new Integer(int i)语句,大小在-128~127之间,对象存放在Integer常量池中。
    • 当超过这个范围后会重新实例化
    • 大部分包装类型都有这个机制
    • Integer的valueOf方法源码

    public static Integer valueOf(int i) {

    if(i >= -128 && i <= IntegerCache.high)

    return IntegerCache.cache[i + 128];

    else

    return new Integer(i);

    }

  • 为什么Double类的valueOf方法会采用与Integer类的valueOf方法不同的实现。很简单:在某个范围内的整型数值的个数是有限的,而浮点数却不是。

    • Integer、Short、Byte、Character、Long这几个类的valueOf方法的实现是类似的。
    • Double、Float的valueOf方法的实现是类似的。
自动装箱与拆箱
  • 装箱就是自动将基本数据类型转换为包装器类型;拆箱就是自动将包装器类型转换为基本数据类型。
 //自动装箱
Integer total = 99; //自定拆箱
int totalprim = total;

最新文章

  1. Linux时间同步
  2. 用友U8 归纳采购退货结算三种情况
  3. ViewFlipper(翻转视图)的使用
  4. SVN导出/导入、SVN备份/还原 【小白版】
  5. Tensorflow学习笔记4:分布式Tensorflow
  6. Asp.net MVC 之过滤器
  7. OpenGL入门学习(转)
  8. visual studio 2015 企业版 序列号及官方下载地址
  9. 有关android源码编译的几个问题
  10. iOS UIApplication 里面各const实际用意
  11. 解决在eclipse中写ImageView时有警告的问题
  12. CI框架浅析(二)
  13. JAVA入门[8]-测试mybatis
  14. 《SpringMVC从入门到放肆》二、SpringMVC的执行流程及默认配置
  15. Android多种样式的进度条
  16. 一文看懂Transformer内部原理(含PyTorch实现)
  17. 『TensorFlow』迁移学习
  18. 最好用的mongodb可视化工具
  19. tomcat 管理端 安全措施
  20. Java NIO系列教程(十一) Java NIO 与 IO

热门文章

  1. mybatis的核心配置文件
  2. 通过Servlet生成验证码图片(转)
  3. Laravel5.5 邮件发送报错:stream_socket_client()
  4. 简易数据分析 15 | Web Scraper 高级用法——CSS 选择器的使用
  5. JMM&amp;Thread
  6. acwing 102 -利用二分枚举区间平均值
  7. EnvironmentAware接口的作用
  8. 洛谷$P$2472 蜥蜴 $[SCOI2007]$ 网络流
  9. spring cloud微服务快速教程之(六) 应用监控 spring boot admin
  10. (四)注册登录--重用Django