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;

Integer梳理的更多相关文章

  1. [SQL] SQL 基础知识梳理(一)- 数据库与 SQL

    SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...

  2. [SQL] SQL 基础知识梳理(二) - 查询基础

    SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...

  3. [SQL] SQL 基础知识梳理(五) - 复杂查询

    SQL 基础知识梳理(五) - 复杂查询 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5939796.html 序 这是<SQL 基础知识梳理( ...

  4. solr DIH 知识梳理

    solr DIH 知识梳理 web.xml中listener配置 <listener> <listener-class>org.apache.solr.handler.data ...

  5. Android tween 动画 XML 梳理

    前言: Tween动画是展现出旋转.渐变.移动.缩放的这么一种转换过程,即补间动画.Tween动画有两种定义方式:XML形式,编码形式.这次主要来梳理XML的方式配置动画 (1)XML定义动画,按照动 ...

  6. Java集合类: Set、List、Map、Queue使用场景梳理

    本文主要关注Java编程中涉及到的各种集合类,以及它们的使用场景 相关学习资料 http://files.cnblogs.com/LittleHann/java%E9%9B%86%E5%90%88%E ...

  7. 基础知识《六》---Java集合类: Set、List、Map、Queue使用场景梳理

    本文转载自LittleHann 相关学习资料 http://files.cnblogs.com/LittleHann/java%E9%9B%86%E5%90%88%E6%8E%92%E5%BA%8F% ...

  8. [SQL] SQL 基础知识梳理(六)- 函数、谓词、CASE 表达式

    SQL 基础知识梳理(六)-  函数.谓词.CASE 表达式 目录 函数 谓词 CASE 表达式 一.函数 1.函数:输入某一值得到相应输出结果的功能,输入值称为“参数”,输出值称为“返回值”. 2. ...

  9. [SQL] SQL 基础知识梳理(七)- 集合运算

    SQL 基础知识梳理(七)- 集合运算 目录 表的加减法 联结(以列为单位) 一.表的加减法 1.集合:记录的集合(表.视图和查询的执行结果). 2.UNION(并集):表的加法 -- DDL:创建表 ...

随机推荐

  1. linux 如何查找命令的路径(which搜索系统命令,whichis搜索文件)

    http://hi.baidu.com/longredhao/item/911356ea2d8bed3687d9deed linux 下,我们常使用 cd ,grep,vi 等命令,有时候我们要查到这 ...

  2. python3中map函数

    map函数是Python里面比较重要的函数 map函数后面必须接的是序列(元组/列表/字符串) 在python2中执行一些语句 >>> map(str,[1,2,3,4]) ['1' ...

  3. Mybatis的mapper.xml文件详解

    1.#{}和${}的区别: #{}表示一个占位符号,#{}接收输入参数,类型可以是简单类型,pojo.hashmap.        如果接收简单类型,#{}中可以写成value或其它名称.      ...

  4. HFile v2 v3文件结构

    http://blog.csdn.net/map_lixiupeng/article/details/40861791 http://blog.csdn.net/map_lixiupeng/artic ...

  5. TCP/IP||ARP/RARP

    1.ARP ARP(地址解析协议)主要为IP地址到对应的硬件提供动态映射,过程是自动完成 在网络接口有一个硬件地址(48 bit),在硬件层次上的数据帧交换必须有正确的接口地址,但是32 bit 的I ...

  6. mysql主丛之基于binlog的不停业务配置主从

    一 环境准备 主:192.168.132.121 从:192.168.132.122 主的数据库上面已经有数据,而且还在不断的写入 mysql> select * from darren.tes ...

  7. DEVOPS技术实践_02:jenkins自动构建项目

    一.用户名密码错误 打开jenkins发现用户名密码错误,解决 1.1 找到config.xml文件 [root@jenkins-master ~]# ll -a drwxr-xr-x. root r ...

  8. 负载均衡基本原理与lvs

    前言: 之前在山西的项目上使用的是lvs下的NAT模式,但另外两个模式并没有涉及,今天系统的整理下关于负载均衡的相关理论与lvs各模式的相关优点与不足,知其然与所以然,而后能针对性的应用: 基本介绍 ...

  9. Sample Code之Take a screenshot of a SceneView

    周末事情太多了,以后就工作日发布随笔吧.周末的话,看心情,也许也会发~ 今天的实例代码解析是Take a screenshot of a SceneView,也就是获取快照,话不多说,进入正题. 首先 ...

  10. [工具] 利用setuptools打包python程序

    一.准备工程文件 1.创建工程leeoo 2.在工程根目录下创建setup.py文件 3.在工程根目录下创建同名package 二.编辑setup.py 1.编辑setup.py文件 from set ...