Java中的int与Integer对比
来源:互联网 发布:手机可以plc编程软件吗 编辑:程序博客网 时间:2024/06/14 13:25
Java中的int类型与Integer类之间的关系是面试Java中很常见的一类题,本文对int和Integer之间的相互关系进行一个简单介绍,在介绍之前先说一下Integer类的三种声明方式:1. Integer a = new Integer(value); 2. Integer a = value; 3. Integer a = Integer.valueOf(value);下面详细介绍它们之间的关系
1. int == Integer
Integer声明语句任意,在这种类型的比较中,只要value值相同,则必定为true;因为Java的自动拆装箱特性,在Integer类与int基本类型进行“==”比较时,会对Integer类进行自动拆箱,所以“==”这一引用地址的判断就会退化为基本类型的数值判断。
2. Integer.equals(int)
Integer声明语句任意,这一操作为纯粹的数值比较,只要数值一样,返回true,在实际项目开发中equals函数运用广泛,并且一个小技巧是equals函数之前一般放置不会为空的对象,equals之后括号中放置可能为空的对象,可以避免错误。
3. Integer.equals(Integer)
Integer声明语句任意,同2,都是数值比较,数值相同则返回true。
4. Integer a = new Integer(value1); Integer b = new Integer(value2); a == b;
可以看到上述Integer声明方式为1,不管value值是否相同,全部返回false,因为上述语句表示判断a与b的引用地址是否相同,但是a和b都是新new出来的对象,其地址肯定不会相同,故返回false。
5. Integer a = value1(或Integer.valueOf(value1)); Integer b = value2(或Integer.valueOf(value2)); a == b;
可以看到上述Integer声明语句为2或者3,当-128<=value1,value2<=127时,只要value1=value2则必定返回true,因为在java5以后为了提高性能,在Integer类首次使用时,会初始化value=[-128, 127]范围内的Integer实例对象并且缓存起来,所以当出现上述情况时,a和b得到的引用地址其实都是缓存区中的同一对象,所以必定返回true。当value值超出[-128, 127]范围,则上述a和b又相当于创建了两个新的实例对象,地址肯定不同,即使value1=value2,也必定返回false。
测试代码如下:
public class IntegerTest {public static void main(String[] args){Integer i1 = 127;Integer i2 = 128;Integer k1 = Integer.valueOf(127);Integer k2 = Integer.valueOf(128);System.out.println(i1 == k1); //true,Integer声明方式为2或3,在[-128,127]内System.out.println(i2 == k2); //false,超出[-128,127]Integer j1 = new Integer(127);Integer j2 = new Integer(127);Integer j3 = new Integer(128);Integer j4 = new Integer(128);//只要是new出来的Integer,不管在不在[-128,127]都为falseSystem.out.println(j1 ==j2); //falseSystem.out.println(j3 == j4); //falseSystem.out.println(j1 == j3); //falseint c1 = 127;int c2 = 128;//Integer == int判断会进行Integer的拆箱,只要数值相同就返回true,System.out.println(c1 == i1); //trueSystem.out.println(c2 == k2); //trueSystem.out.println(c1 == j1); //true}}
- Java中的int与Integer对比
- java中的Integer与int
- Java中的Integer与int
- java中的Integer与int
- java中的值类型int与引用类型integer
- java int 与Integer区别
- java,Integer[]与int[]区别
- Java Integer与int,栈与堆
- Java中的int和Integer的区别
- java中的Integer和int比较
- java基本数据类型&&int与Integer区别
- java int与integer的区别
- Int与Integer(Java复习一)
- Java的Integer与int互转
- java int与integer的区别
- java int与integer的区别
- java int与integer的区别
- Java的Integer与int互转
- Java8クラス
- 康托展开
- 关于getting 'android:label' attribute: attribute is not a string value 错误的解决方法
- 搜索—Problem_1019-N皇后问题
- ioctl
- Java中的int与Integer对比
- Android基础控件 - RadioButton与CheckBox
- C实现一个简单链栈
- 3.六种单例设计模式,嗯,强行六种
- 【android】项目案例(二)之京东客户端
- HDU-1232/NYOJ-608畅通工程,并查集模板题,,水过~~~
- 使用配置文件properties
- HDU 1172 猜数字(暴力)
- c#的接口详解