程序员

Integer和int的爱恨情仇(Java)

2019-08-17  本文已影响13人  雁度寒崖

int类型

int类的简介

int是Java的8大基本数据类型之一,32位,有符号的以二进制补码表示的整数
最小值-2^{31}=-2,147,483,648
最大值2^{31}-1=2,147,483,647
整形变量默认是int类型
int类型默认值是0
基本数据类型的对象都在栈中,所以可以直接用==来判断两个int类型的是否相等

Integer类

Integer类简介

Integer类是基本数据类型int的包装器类,是抽象类Number的子类,位于java.lang包中
Integer类在对象中包装了一个基本类型int的值,也就是每个Integer对象包含一个int类型的字段。在Integer源码中如下

private final int value;

占多少位?

System.out.println(Integer.BYTES);  //4
System.out.println(Integer.SIZE);   //32

可以看出,Integer占32位,4个字节,和int类型是一样的

最大值和最小值

System.out.println(Integer.MAX_VALUE);//2147483647
System.out.println(Integer.MIN_VALUE);//-2147483648
初始化方法

构造函数

Integer(int value);
Integer(String s); //String里面只能写数字

这两种构造方法现在已经被废弃了,更多的现在是直接写=,就像这样:

Integer i = 100;

默认值是NULL

对比int和Integer

1)“==”和equals()方法:

在Integer类中,“==”用来比较对象地址是否相同,并且Integer类重写了equals(Object obj)方法,
在equals(Object obj)方法中,会先判断参数中的对象obj是否是Integer类型的对象,
如果是则判断值是否相同,值相同则返回true,
值不同则返回false,如果obj不是Integer类的对象,则返回false。

int a = 200;
Integer b = 200;
Integer c = 200;
Integer d = 2;
Integer e = 2;

//a在进行比较时,会***自动装箱***
System.out.println(b.equals(a));  //true
        
//因为b是Integer对象,a是基本数据类型int的变量,当进行“==”比较时,b会***自动拆箱***成int,从而比较的就是变量的值是否相等
System.out.println(b == a);   //true

//对比两个值相等的Integer对象(),如果用==,Integer的值在-128~127之间,则直接比对的是值,不在这个范围里就比较地址:
System.out.println(b == c);  //false
System.out.println(d == e);  //true

另外,Integer类里面还有很多很实用的方法:

函数 解释
[static int] bitCount(int i) 返回指定 int 值的二进制补码表示形式的 1 位的数量
[static int] compare(int x,int y) 比较x和y的值,当x大于y时返回1,当x等于y时返回0,否则返回-1
[int] compareTo(Integer anotherInteger) 在数值上比较两个Integer对象
[boolean] equals(Object obj) 比较此对象与指定对象
[int] hashcode() 返回此对象的哈希码
[static int] parseInt(String str) 将字符串参数作为有符号十进制数进行解析
[static String] toBinaryString(int i) 以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式
[String] toString() 返回该Integer值得String对象
[static Integer] valueOf(int i) 返回一个表示指定的 int 值的 Integer 实例
上一篇 下一篇

猜你喜欢

热点阅读