【从零开始的Java开发】1-5-2 包装类与基本数据类型、常用API、基本数据类型与包装类、字符串之间的转换、包装类的初始值与比较、对象常量池

包装类与基本数据类型

Java的数据类型:
在这里插入图片描述
其中,基本数据类型是没有属性、方法的,也无法对象化交互。
包装类的产生就是为了解决这样的问题。
通过包装类,可以使基本数据类型拥有属性、方法,可以对象化交互。

包装类与基本数据类型
在这里插入图片描述

包装类常用方法

https://docs.oracle.com/javase/8/docs/api/
我们以Integer为例,查看文档,了解其常用的属性和方法:
在这里插入图片描述

我们可以看到,Java中包装类都用final修饰,都是不允许继承,也没有子类的。
且,Integer是继承自Number类的——实际上,所有数值型都是继承自Number类的。
在这里插入图片描述
而char的包装类Character,boolean的包装类Boolean,都是继承自Object的。
在这里插入图片描述

在这里插入图片描述
在这里可以看到Integer的相关方法:
在这里插入图片描述

基本数据类型与包装类之间的转换

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

装箱代码:装箱分为自动装箱和手动装箱。

public class WrapTest1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 装箱:把基本数据类型转换为包装类
		// 1、自动装箱
		int t1 = 2;
		Integer t2 = t1;

		// 2、手动装箱
		Integer t3 = new Integer(t1);

		// 测试
		System.out.println(t1);
		System.out.println(t2);
		System.out.println(t3);
	}

}

输出:

2
2
2

拆箱代码:有自动拆箱和手动拆箱两种。

public class WrapTest1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 装箱:把基本数据类型转换为包装类
		// 1、自动装箱
		int t1 = 2;
		Integer t2 = t1;

		// 2、手动装箱
		Integer t3 = new Integer(t1);

		// 拆箱:把包装类转换为基本数据类型
		// 1、自动拆箱
		int t4 = t2;

		// 2、手动拆箱
		int t5 = t2.intValue();
		// 测试
		System.out.println(t4);
		System.out.println(t5);
	}

}

输出:

2
2

也可以这样转换:

double t = t2.doubleValue();
System.out.println(t);

输出:2.0

基本数据类型和字符串之间的转换

基本数据类型转换为字符串

public static void main(String[] args) {
		// 基本数据类型转换为字符串
		int t1 = 2;
		String t2 = Integer.toString(t1);
		System.out.println(t2);
	}

输出:2

字符串转换为基本数据类型

方法1:包装类的parse方法

public static void main(String[] args) {
		// 基本数据类型转换为字符串
		int t1 = 2;
		String t2 = Integer.toString(t1);

		int t3 = Integer.parseInt(t2);
		System.out.println(t3);
	}

输出:2

方法2:包装类的valueOf方法。

public static void main(String[] args) {
		// 基本数据类型转换为字符串
		int t1 = 2;
		String t2 = Integer.toString(t1);

		int t3 = Integer.valueOf(t2);
		System.out.println(t3);
	}

输出:2

包装类相关知识

包装类的初始值

基本数据类型的初始值
在这里插入图片描述
包装类的初始值
null

包装类对象间的比较

思考:
在这里插入图片描述
答案:

false
true
true
true
false

为什么one==twofalse
因为one和two指向的是两个不同的空间,只是他们的值都是100而已。因此,他们不相等。

public static void main(String[] args) {
		Integer one=new Integer(100);
		Integer two=new Integer(100);
		System.out.println(one);
		System.out.println(two);
	}

输出:false

为什么three==100true:它其实完成了自动拆箱的操作,所以是true。

Integer three=100;
System.out.println(three==100);

输出:false

为什么three==fourtrue

Integer three = 100;
Integer four = 100;
System.out.println(three == four);

输出:true

原因:Integer four=100其实执行的是Integer four=Integer.valueOf(100);
为了提高运行效率,Java有一个常量数组的缓存区(对象池),当 -128<=数值<=127 时,Java会直接在对象池里找这样一个常数,如果有这样的常数,对象会直接指向这块内存;如果没有,再实例化Integer。
因此,上面的代码中three和four指向的是同一块空间

显然,我们有:

Integer three = 128;
Integer four = 128;
System.out.println(three == four);

false

对象常量池

除了floatdouble,其他的都可以用对象常量池。

也就是说:

Double d1 = Double.valueOf(100);
Double d2 = Double.valueOf(100);
System.out.println(d1 == d2);

输出false

总结

在Java中,我们可以通过包装类解决基本数据类型的不具有对象化的能力的问题。
每一种基本数据类型都有它对应的包装类:
在这里插入图片描述
Java中所有的包装类都是存在Java.lang中的。
我们可以通过装箱和拆箱的操作来实现包装类和基本数据类型的转换。
我们也可以用包装类来完成基本数据类型和字符串之间的转换。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

karshey

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值