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

Posted karshey

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从零开始的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中的。
我们可以通过装箱和拆箱的操作来实现包装类和基本数据类型的转换。
我们也可以用包装类来完成基本数据类型和字符串之间的转换。

以上是关于从零开始的Java开发1-5-2 包装类与基本数据类型常用API基本数据类型与包装类字符串之间的转换包装类的初始值与比较对象常量池的主要内容,如果未能解决你的问题,请参考以下文章

Java学习笔记4.4.2 包装类 - 基本数据类型包装类与字符串相互转换

Java面试题基本类型包装类与String类间的转换

Java进阶包装类

java从零开始之Java Number & Math 类

java从零开始之Java Number & Math 类

JAVA中初始化及默认值,包装类与基本类型