温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java中int和Integer有什么不同

发布时间:2020-06-10 18:32:06 来源:亿速云 阅读:222 作者:鸽子 栏目:编程语言

基础:

1、int 是 java 的一种基础数据类型,而 integer 是int 的一个封装类。

2、Integer 变量必须实例化之后才能使用,而 int 变量不需要。

3、Integer 实际是对象的引用,当 new 一个 integer 对象时,实际上是生成一个指针指向该对象;而 int 是直接存储数据值。

4、Integer 的默认值是 null ,而 int 的默认值是 0。

延伸:

1、因为 integer 变量实际上是对 integer 对象的引用,所以两个通过new 的integer 变量永远不相等(因为 new 生成的是两个对象,其内存地址不一样)。

Integer i = new Integer(100);
Integer j = new Integer(100);
System.out.print(i == j);//false

2、当一个 integer 变量和一个 int 变量比较时,只要两个变量的值相等,那么结果就是true,因为 integer 本质是 int 的一个封装类,当两数比较时,java会自动将 integer拆包,所以本质上就是两个int 变量的比较。

Integer i = new Integer(100);
int j = 100;
System.out.print(i == j);//true

3、当一个 new 创建的 Integer 变量和一个非 new 创建的 Integer 变量比较时,结果为false。因为非 new 创建的变量存在 java 常量池中,而 new 创建的变量指向堆中新建的对象,两者的内存地址不同。

Integer i = new Integer(100);
Integer j = 100;
System.out.print(i == j);//false

4、当两个非 new 的 Integer 变量比较时,如果两个变量的值在-128到127之间,那么结果就是 true,否则是 false。

对于这个奇怪的结果,java 的解释是这样的:

Integer i = new Integer(100);//在编译时会变成Integer i = Integer.ValueOf(100)

而 java API 中对 Integer.valueOf()的定义如下:

public static Integer valueOf(int i){
    assert IntegerCache.high >= 127;
    if (i >= IntegerCache.low && i <= IntegerCache.high){
        return IntegerCache.cache[i + (-IntegerCache.low)];
    }
    return new Integer(i);
}

即,对于 -128~127 的数,java会进行缓存,而下次再对一个 Integer 变量赋值时,如果在 -128~127 并且已经被缓存,那么就会直接从缓存中调用。

以上就是java integer和int的区别有哪些的详细内容,更多请关注亿速云其它相关文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI