Java包装类

目录

一、包装类简介:

二、装箱和拆箱:

 三、通过包装类使基本数据类型和字符串互转:

四、包装类对象间的比较:


一、包装类简介:

  • Java数据类型中的基本数据类型不具备数据特征:没有属性、方法,不能对象交互。
  • 通过包装类可以使基本数据类型具备数据特征:拥有属性、方法,可以对象交互。
包装类与基本数据类型
基本类型对应的包装类
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean
  • Java中的包装类存放在 java.lang 包中。
  • Java中的包装类是不允许被继承、无子类的。
  • 基本类型中, 数值型的包装类继承自Number类,字符型和布尔型的包装类继承自Object类

  • 包装类对象的初始值是 null 。

二、装箱和拆箱:

  • 装箱:把基本数据类型的值转换成对应的包装类对象
  • 拆箱:把包装类对象转换成对应的基本数据类型的值。

例:


public class Wrap1 {

	public static void main(String[] args) {
		//装箱:
		//1.自动装箱
		int a1=2;
		Integer a2=a1;
		//2.手动装箱
		Integer a3=new Integer(a1);  //构造函数
		//测试
		System.out.println("int类型变量a1="+a1);
		System.out.println("Integer类型对象a2="+a2);
		System.out.println("Integer类型变量a3="+a3);
		System.out.println("=========================");
		//拆箱:
		//1.自动拆箱
		int a4=a2;
		//2.手动拆箱
		int a5=a2.intValue();  //该方法把Integer对象值转换为整型对象的值
		//测试
		System.out.println("Integer类型变量a2="+a2);
		System.out.println("int类型对象a4="+a4);
		System.out.println("int类型变量a5="+a5);
		double a6=a2.doubleValue();  //包装类转double型
		System.out.println("手动拆箱后,double型变量a6="+a6);
	}
}

 

 三、通过包装类使基本数据类型和字符串互转:

例:


public class Wrap2 {

	public static void main(String[] args) {
		//基本数据类型转换为字符串
		int b1=22;
		String b2=Integer.toString(b1);
		//测试
		System.out.println("int型转换为String型对象b2="+b1);
		System.out.println("=========================");
		
		//字符串转基本数据类型
		//法1:使用包装类的parse...()方法
		int b3=Integer.parseInt(b2);
		//法2:先使用包装类的valueOf()方法装箱:字符串对象转包装类对象。再拆箱:包装类对象转基本数据类型。
		int b4=Integer.valueOf(b2);
		//测试
		System.out.println("String型转换为int型对象b3="+b3);
		System.out.println("String型转换为int型对象b4="+b4);

	}

}

四、包装类对象间的比较:

例:


public class Wrap3 {

	public static void main(String[] args) {
		Integer a=new Integer(100);  //手动装箱
		Integer b=new Integer(100);
		System.out.println("a==b的结果是:"+(a==b));  // Ⅰ
		
		Integer c=100;  //自动装箱 A
		System.out.println("c==100的结果是:"+(c==100));  // Ⅱ
		
		Integer d=100;  //B
		System.out.println("c==d的结果是:"+(c==d));  // Ⅲ

		Integer e=200;
		System.out.println("e==200的结果是:"+(e==200));  // Ⅳ
		
		Integer f=200;
		System.out.println("e==f的结果是:"+(e==f));  // Ⅴ
	}
}

分析:

Ⅰ:在Java中,若==两侧是对象,则比较的是对象在内存中的引用,不仅仅是值 。而通过new关键字的实例化操作会在内存中开辟一块新的空间,故a和b指向不同的2块内存空间。

Ⅱ:注意:“ c==100; ”是一个自动拆箱的操作,故==比较的是整型数值。

 Ⅲ:实际上,编译器对于 “ Integer d=100; ” 执行的操作是 “ Integer d=Integer.valueOf(100); ”。Java在进行自动拆/装箱时,核心就是valueOf()方法。而在valueOf()方法执行过程中,有一个缓存区(常量池),如果传进来的参数满足:-128<参数<127,会直接在缓存区中查找是否存在这样一个对象。若存在一个这样的对象,将会直接产生该对象;若无,会隐式地调用new关键字去实例化一个这样的对象。

       因为前面A处的语句已隐式执行了 “ Integer d=Integer.valueOf(100); ”,已在缓存区构建了一个值为100的int型对象。于是B处语句会直接在缓存区找到该对象,就这样 c 和 d 指向了缓存区中的同一块空间,故c==d。

Ⅴ:注意此时参数已不满足:-128<参数<127,跳过,直接隐式地调用new关键字去实例化一个这样的对象。

Java的8种基本数据类型对应的包装类中,除了Float 和 Double ,其他的都可以应用常量池。


public class Wrap3 {

	public static void main(String[] args) {
		Double x=Double.valueOf(100);
		System.out.println("x==100的结果是:"+(x==100));
		
		Double y=Double.valueOf(100);
		System.out.println("x==y的结果是:"+(x==y)); 

	}
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值