JAVA---包装类

版权声明:转载请标明出处~~谢谢! https://blog.csdn.net/zoe_ranxiaosu/article/details/81986214

包装类

          java语言是面向对象的语言,而基本数据类型的数据不是对象,但是有的时候我们
          需要研究使用基本数据类型的数据,需要将之转换成对象来使用,这个时候我们可
          以将基本数据类型包装成引用类型。
               

每一个基本数据类型都对应一个包装类:
     byte----->Byte
     short---->Short
     int------>Integer
     long----->Long
     float---->Float
     double--->Double
     char----->Character
     boolean-->Boolean

特点
    (1)都是final修饰的
    (2)一经创建的对象里的数据不可变
    (3)Character和Boolean的父类是Object,其他六种的父类是Number类型
      (Number是抽象类)

Integer:    
常用构造器:
     Integer(int value)
          通过指定的基本数据类型的数据构建一个Integer对象
     Integer(String str)
          通过指定的字符串的数据构建一个Integer对象
常用方法:
      int intValue();
            作用是将包装类的对象拆箱成基本数据类型
      static int parseInt(String s)
            作用是将字符串转换成10进制的基本数据类型
      static Integer valueof(String s)
            作用是将字符串转成Integer对象

JDK1.5以后支持自动装箱和拆箱(reg:TextBox1)  

/**
 * jdk1.5以后支持自动装箱和拆箱 
 * */
public class TextBox1 {
	public static void main(String[] args) {
		/*
		 * 发生了自动装箱操作,相当于调用了Integer.valueOf(5)
		 * 5被包装成对象,存在堆中。将地址值给了变量i
		 * */
		Integer i = 5;
		/*
		 * 发生了自动拆箱操作,相当于i.intValue()
		 * 对象i被拆箱成基本数据类型5存储在num空间里 
		 */
		int num = i;
		/*
		 *任何引用数据类型的变量不可以进行运算。
		 *除了字符串拼接 
		 */
		Integer n1 = new Integer(10);
		Integer n2 = new Integer(20);
		Integer n3 = n1+n2;
		/*
		 * n1发生了自动拆箱,即n1.intValue(),变成基本数据类型
		 *n2发生了自动拆箱,即n2.intValue(),变成基本数据类型
		 *然后进行运算,结果为基本数据类型的30
		 *30自动装箱,底层调用Integer.valueOf(30),
		 *变成对象n3
		 */
		System.out.println(n3);
	}

}

包装类的常量池

基本数据类型的包装类除了浮点数类型都有自己的常量池。当将基本数据类型进行自动装箱时,装箱后的对象的字面值,如果是在 -128~127会存储在常量池中,会先检查常量池中是否有相同字面值的对象,如果有,则将常量池的地址给引用变量。

public class Text02 {
	public static void main(String[] args) {
		Integer i1 = new Integer(100);
		Integer i2 = new Integer(100);
		System.out.println(i1 == i2);// false,不是自动装箱时数据不是存在常量池中
		// 测试自动装箱
		Integer i3 = 100;// 100装箱后变成对象,存入常量池中
		Integer i4 = 100;
		/*
		 * 100装箱后,去常量池中查找是否有相同值的对象,发现存在 就将常量池中的i3值给了i4
		 */

		System.out.println(i3 == i4);
		Byte i5 = 100;
		Byte i6 = 100;
		System.out.println(i5 == i6);
		/*
		 * 整数的包装类 Byte,Short,Integer,Long都有自己的常量池(字面量-128~127)
		 * Character也有自己的常量池: '\u0000'~'\u007f'
		 * 
		 * Boolean也有常量池
		 * 
		 * 浮点数类型的包装类没有常量池
		 */
		System.out.println(i5 == (Number) i3);// Byte和Integer的父类是Number,用Number进行强转

		Character c1 = (char) (-1);
		Character c2 = (char) (-1);
		System.out.println(c1 == c2);

		Boolean f = true;
		Boolean f1 = true;
		System.out.println(f == f1);

	}

}

猜你喜欢

转载自blog.csdn.net/zoe_ranxiaosu/article/details/81986214
今日推荐