Java Integer类

本文详细探讨了Java中的Integer类型与int的关系,包括Integer的默认值、MAX_VALUE/MIN_VALUE、SIZE概念,以及==和equals()的区别。重点讲解了Integer对象的内存地址比较和缓存机制,以及如何正确使用parseInt()和toString()方法。
  • 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()"的区别?
  1. ==:如果是基本数据类型,则比较的是两个的值;如果是引用数据类型,是直接比较的两个对象的堆内存地址
  2. equals():比较的是两个字符串的内容
  • 出现的问题?
  1. integer1和integer2在用“==”方法比较不相等的原因是,对象通过“==”比较的是对象内存地址。new开辟了一个新的空间,因此两个对象存放的地址不同
  2. i1和i2在使用“==”方法比较相等的原因是,当Int值范围在-128—127之间时,会通过一个IntegerCache缓存来创建Integer对象,这两个Integer变量引用的是缓存中的同一个Integer对象
  3. 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;
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值