基本:
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 而且已被缓存,那末就会直接从缓存中挪用。
ki4网,有大批免费的JAVA入门教程,迎接人人进修!
以上就是java integer和int的区分有哪些的细致内容,更多请关注ki4网别的相干文章!