- Integer 是对 int 型的封装数据类型,Integer是一个对象,在对象中包装了一个基本类型 int 的值,能表示的范围是 -231 ~ 231-1 的所有整数
- Integer的默认值是null,int的默认值是0,Integer可以区分出未赋值和值为0的区别
- MAX_VALUE:值为 231-1 的常量,它表示 int 类型能够表示的最大值。
- MIN_VALUE:值为 -231 的常量,它表示 int 类型能够表示的最小值。
- SIZE:用来以二进制补码形式表示 int 值的比特位数。
- 位(bit):是计算机内部数据存储的最小单位
- 字节(byte):是计算机中数据处理的基本单位,习惯上用大写B来表示
- 1B(byte)=8bit (位)
演示代码
- "=="和"equals()"的区别?
- ==:如果是基本数据类型,则比较的是两个的值;如果是引用数据类型,是直接比较的两个对象的堆内存地址
- equals():比较的是两个字符串的内容
- 出现的问题?
- integer1和integer2在用“==”方法比较不相等的原因是,对象通过“==”比较的是对象内存地址。new开辟了一个新的空间,因此两个对象存放的地址不同
- i1和i2在使用“==”方法比较相等的原因是,当Int值范围在-128—127之间时,会通过一个IntegerCache缓存来创建Integer对象,这两个Integer变量引用的是缓存中的同一个Integer对象
- i3和i4在用“==”方法比较不相等的原因是,当Int值不在-128—127范围时,使用了new Integer()方法来创建对象,此时new开辟了两个不相同的空间,内存地址不同
转载自博客:Java中Int、Integer、new Integer()之间的区别
(1)不管是new创建的Integer对象,还是通过直接赋值Int值创建的Integer对象,它们与Int类型变量>通过“==”进行比较时都会自动拆封装变成Int类型,所以Integer对象和Int变量比较的是内容大小。
例如:int a = 100;Integer b = 100;Integer c = new Integer(100);a == b == c为True。
(2)new创建的Integer对象和直接赋Int值创建的Integer对象相互比较
这两种Integer对象通过“==”比较的都是内存地址。
(3)赋Int值创建的Integer对象相互比较
当Int值在-128—127之间时,两个Integer变量引用的是IntegerCache中的同一个对象,比较的内存地址相同。
当Int值不在以上范围时,两个Integer对象都是通过new创建的,比较的内存地址不同。
public class Try {
public static int s1;
public static Integer s2;
public static void main(String[] args) {
System.out.println("int类型的默认值:" +s1);// 0
System.out.println("Integer类型的默认值:" + s2);// null
Integer integer1 = new Integer(100);
Integer integer2 = new Integer("100");
System.out.println("integer1的值:" + integer1 + " integer2的值:" + integer2);
System.out.println("equals方法判断两值是否相等"+integer1.equals(integer2));//true
System.out.println("==方法判断两值是否相等"+(integer1 == integer2));//false
Integer i1 = 100;
Integer i2 = Integer.valueOf(100);/*系统会自动将这个Int值封装成一个Integer对象。比
如:Integer i2 = 100;实际上的操作是:Integer i2 = Integer.valueof(100);*/
System.out.println("i1的值:" + i1 + " i2的值:" + i2);
System.out.println("equals方法判断两值是否相等"+i1.equals(i2));//true
System.out.println("==方法判断两值是否相等"+(i1 == i2));//true
Integer i3 = 1000;
Integer i4 = 1000;
System.out.println("i1的值:" + i3+ " i2的值:" + i4);
System.out.println("equals方法判断两值是否相等"+i3.equals(i4));//true
System.out.println("==方法判断两值是否相等"+(i3 == i4));//false
integer();
}
public static void integer() {
//如何将字符串转换为 int 类型的数值,或者将 int 类型的数值转换为对应的字符串
String string = "12345";
//String string = "1234s5";
int i = Integer.parseInt(string);// 将字符串转换为int类型的数值
int Int = 12345;
String n = Integer.toString(Int);//将int类型的数值转换为字符串
/*注意:在实现将字符串转换为 int 类型数值的过程中,如果字符串中包含非数值类型的字符,则程序执行将出现异常。
Exception in thread "main" java.lang.NumberFormatException: For input string: "1234s5"
即输入的数字格式出现错误
*/
int max = Integer.MAX_VALUE;//获取int类型的最大值
int min = Integer.MIN_VALUE;//获取int类型的最小值
int size = Integer.SIZE;//获取int类型的比特位数
System.out.println("Integer.parseInt(string)=" + i);
System.out.println("Integer.toString(Int)=" + n);
System.out.println("int的最大值:"+max+",最小值:"+min+",int比特位数"+size);
}
}
运行结果:

Java 实例 - 两个int类型数组的并集
package com.thf.base;
import java.util.HashSet;
import java.util.Set;
public class AddArray {
public static void main(String[] args) {
int[] array1 = {29,32,23,64};
int[] array2 = {44,55,66,76,};
int[] addarray = union(array1,array2);
for (int i : addarray) {
System.out.print(i+" ");
}
}
//HashSet不会出现重复的元素,其次它是无序的,此外它可以含有空元素
private static int[] union(int[] array1, int[] array2) {
Set<Integer> set = new HashSet<>();//定义Set集合对象
for (int i : array1) {
set.add(i);//add()如果此set中尚未包含指定元素,则添加指定元素
}
for (int i : array2) {
set.add(i);
}
/*将集合转化为数组,数组是不能直接转换为另一种类型的数组的,需要
将数组中的元素挨个转换
Object类是所有Java类的祖先。每个类都使用Object作为超类(被继承的类一般称为“超类”或“父类”,继承的类称为“子类”)。
在不明确给出超类的情况下,Java会自动把Object作为要定义类的超类,可以使用类型为Object的变量指向任意类型的对象。
Object类的变量只能用作各种值的通用持有者,要对它们进行任何专门的操作,都需要知道它们的原始类型并进行类型转换
*/
Object[] objects={};//构造一个Obeject类型数组
objects = set.toArray(objects);
int tmp[] =new int[objects.length];//将set里面的内容转换成int类型
for(int i=0;i<objects.length;i++){
tmp[i]=(int)objects[i];
}
return tmp;
}
}
本文详细探讨了Java中的Integer类型与int的关系,包括Integer的默认值、MAX_VALUE/MIN_VALUE、SIZE概念,以及==和equals()的区别。重点讲解了Integer对象的内存地址比较和缓存机制,以及如何正确使用parseInt()和toString()方法。
1730

被折叠的 条评论
为什么被折叠?



