我是靠谱客的博主 悦耳太阳,最近开发中收集的这篇文章主要介绍java中int叫什么_java中int和Integer有什么不同,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

java中int和Integer有什么不同

发布时间:2020-06-10 18:32:06

来源:亿速云

阅读:113

作者:鸽子

基础:

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中int叫什么_java中int和Integer有什么不同的全部内容,希望文章能够帮你解决java中int叫什么_java中int和Integer有什么不同所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部