Java---详细解析包装类 让你彻底明白 Integer 类和 int 基本数据类型的区别

Integer类

   对应的是基本数据类型 int 类型的包装类

   任意的一个基本数据类型都有一个class属性

   class使用来描述显示事物的, int这个基本数据类型也是一个事物

Number类中的常用方法

   byte byteValue()
     以 byte 形式返回指定的数值。

   abstract double doubleValue()
      以 double 形式返回指定的数值

   abstract float floatValue()
      以 float 形式返回指定的数值。

   abstract int intValue()
      以 int 形式返回指定的数值。

  abstract long longValue()
      以 long 形式返回指定的数值。

   short shortValue()
      以 short 形式返回指定的数值。

   BigDecimal, BigInteger, Byte, Double, Float, Integer, Long, Short这些类作为Number类的子类

   为什么包装类要这样来设计?

   基本数据类型为什么要变成包装类? --> 包装类更方便去操作基本数据类型

   基本数据类型的功能
      1.实现运算 【后面将自动拆装箱】

      2.类型转换 【包装类同时一样可以进行类型转换,利用的就是Number类】

包装类完全可以概括基本数据类型

包装类常用方法示例

public class IntegerDemo01 {
	public static void main(String[] args) {
		// 手动装箱: 将基本数据类型转换成对应包装类类型
		Integer integer = new Integer(100);
		Integer integer2 = new Integer("100");
		
		System.out.println(integer);
		System.out.println(integer2);
		
		System.out.println(Integer.BYTES); // 返回int的字节数
		System.out.println(Integer.SIZE); // 返回对应的位数
		System.out.println(Integer.MAX_VALUE); // int范围的最大值
		System.out.println(Integer.MIN_VALUE); // int范围的最小值
		
		Class c = Integer.TYPE; // 表示基本类型 int 的 Class 实例。
		Class c2 = integer.getClass(); // 表示的是引用数据类型 Integere的 Class实例 
		Class c3 = int.class; // 表示基本类型 int 的 Class 实例。
		System.out.println(c == c2); // false
		System.out.println(c == c3); // true
		System.out.println(c);
		System.out.println(c2);
		System.out.println(c3);
		
		integer.intValue()
		
		
	}
}

成员方法

   public int intValue() 拆箱,将Integer转化为整型

   public static int parseInt(String s) 将字符串转换为int类型

   public static String toString(int i) 将整型转换为字符串

   public static Integer valueOf(int i) 将整型装换为Integer类型

   public static Integer valueOf(String s) 将字符串转换为Integer类型

   根据valueOf相关方法找一个规律

      String.valueOf 将任意类型转换成字符串类型
      Integer.valueOf 将int类型或者String类型转换成Integer类型
      Double.valueOf 将double类型或者String类型转换成Double类型
      XXX.valueOf 将任意类型类型转换成xxx类型

   为什么有了new的方式创建Integer还需要来一个valueOf方法?

   分析源码:

     我们Integer设置了缓存机制,提高了效率

     缓存类IntegerCache里面先定义好了一个Integer[]数组,这个数组会在加载IngerCache类的时候就初始化这个数组

     如果需要创建的数在 -128到127之间的话,就只皆从缓存中取,否则分配内存创建

     开发中Integer.valueOf来创建包装类,但是其实开发中也不用,待会要用自动装箱

包装类手动装拆箱代码示例

public class IntegerDemo02 {
	public static void main(String[] args) {
		// 手动装箱
		Integer ii = new Integer(100);
		// 手动拆箱
		int i = ii.intValue();
		System.out.println(i);
		
		// 将字符串转换成基本数据类型int类型
		int i2 = Integer.parseInt("100");
		System.out.println(i2);
		
		String s = Integer.toString(100);
		System.out.println(s);
		
		// 手动装箱 2
		Integer ii2 = Integer.valueOf(i2);
		System.out.println(ii2);
		
		Integer ii3 = Integer.valueOf("100");
		System.out.println(ii3);
		
	}
}

  自动装箱: 编译器会自动将基本数据类型转换成包装类类型 底层依赖Integer.valuOf()方法

   自动拆箱: 编译器会将包装类类型转换成对应的基本数据类型

   基于自动拆装箱的新特性,我们可以完全把包装类类型当做基本数据类型来使用

自动装拆箱代码示例

	public static void main(String[] args) {
		// 多态
		Object obj = 12;
		// String s = 12;
		Integer i = 12; // 编译器处理方式: Integer i = Integer.valuOf(12);
		
		i = i - 2; // 编译器处理方式:   Intger.valueOf(i.intValue() - 2)
		System.out.println(i);
		
		if (i >= 5) { // 编译器处理方式: i.intValue - 5
			System.out.println("haha");
		}
		
		// byte by = (byte)i;
		Integer ii = 128;
		byte by = ii.byteValue();
		System.out.println(by);
		
		double dd = ii.doubleValue();
		System.out.println(dd);
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章