我是靠谱客的博主 可耐火龙果,最近开发中收集的这篇文章主要介绍java integer和int的区别有哪些,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

基础:

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 并且已经被缓存,那么就会直接从缓存中调用。

PHP中文网,有大量免费的JAVA入门教程,欢迎大家学习!

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

最后

以上就是可耐火龙果为你收集整理的java integer和int的区别有哪些的全部内容,希望文章能够帮你解决java integer和int的区别有哪些所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(80)

评论列表共有 0 条评论

立即
投稿
返回
顶部