JAVA基础编程——基本数据类型的包装类

本文详细介绍了Java中的装箱和拆箱概念,包括基本数据类型与包装类之间的转换,自动装箱与自动拆箱的原理,以及在实际操作中如何使用Object进行统一操作。此外,还讨论了数据类型转换,如将String转换为基本数据类型以及基本数据类型转换为String的方法。最后,文章强调了在进行对象比较和数据转换时需要注意的细节。
摘要由CSDN通过智能技术生成

JAVA中的基本实际原则就是“一切皆对象”。而基本数据类型很显然不是对象,因此可以采用基本数据类型进行包装。

JAVA给出了一组包装类,分别为Byte、Short、Integer、Long、Float、Double、Character、Boolean,对应不同的基本数据类型。

上面的包装类又可以分为两种子类型:

  • 对象型包装类(Object直接子类):Character、Boolean
  • 数值型包装类(Number直接子类):Byte、Short、Integer、Long、Float、Double

Number是一个抽象类,其中一共定义了6个操作方法,分别是intValue/doubleValue/floatValue/byteValue/shortValue/longValue。

装箱与拆箱

基本数据类型和包装类之间的转换可以通过以下方法定义:

  • 装箱操作:将基本数据类型变为包装类,每个包装类的构造方法都可以接收各自数据类型的变量
  • 拆箱操作:从包装类中取出被包装的数据,利用从Number类中继承而来的一系列xxxValue方法完成
public class Demo {
    public static void main(String args[]) {
		Integer obj = new Integer(10);
		int num = obj.intValue();
		System.out.println(num);
	}
}

简单地说,装箱就是有参构造,拆箱就是调用xxxValue方法获得内部数据。除了int外,double也是一样的操作。而boolean虽然是Object的子类,但也有同样的操作。

自动装箱和自动拆箱

自动装箱和自动拆箱是指上述的操作都是自动进行的,无需进行构造操作。

public class Demo {
    public static void main(String args[]) {
		Integer obj = 10;
		int num = obj;
		System.out.println(obj);
		
		++obj;
		System.out.println(obj);
	}
}

结果为:

10
11

从上面的代码看,基本数据类型和包装类之间的转换是自动的,并不需要显式进行装箱和拆箱操作。

再看一段代码:

public class Demo {
    public static void main(String args[]) {
		Integer obj1 = 10;
		Integer obj2 = 10;
		Integer obj3 = new Integer(10);
		
		
		System.out.println(obj1 == obj2);
        System.out.println(obj1 == obj3);
		System.out.println(obj2 == obj3);
		System.out.println(obj2.equals(obj3));
	}
}

结果为:

true
false
false
true

从上面的结果可以看出,自动装箱会保存对象到对象池中,而构造装箱则是会重新开辟新的堆内存空间。因此为了保证对象的有效比较,最好使用equals方法进行比较。

Object

既然知道基本数据类型和和包装类的转换操作,实际上也就可以利用Object来进行统一操作了。所有的引用数据类型都可以利用Object类来接收,而由于存在自动装箱机制,那么基本数据类型同样可以使用Object接收。

public class Demo {
    public static void main(String args[]) {
		Object obj = 10;
		
		int tmp = (Integer)obj;
		
		System.out.println(obj);
		System.out.println(tmp);
		
		System.out.println(tmp * 2);
	}
}

结果为:

10
10
20

从上面的代码可以看出,可以使用Object接收基本数据,并可以直接打印输出,但并不能直接对Object类对象进行基本数据的计算,此时需要向下转型为Integer类型,才能够进行自动拆箱,并进行数据计算。

数据类型转换

而包装类中还存在数据类型转换的操作,在包装类中还提供了将String类数据转换为基本数据的方法,比如:

  • Integer类:public static int parseInt(String s)
  • Double类:public static double parseDouble(String s)
  • Boolean类:public static boolean parseBoolean(String s)

实际上,在给出的8种基本数据类型的包装类中,一共有7个类定义了parseXxx()的方法,可以实现将String变为基本数据类型。但是在Character类中并没有存在这样的方法,相反其对应的方法为charAt()方法。

public class Demo {
    public static void main(String args[]) {
		String str1 = "12";
		String str2 = "12.3";
		
		int var1 = Integer.parseInt(str1);
		double var2 = Double.parseDouble(str2);
		char var3 = str1.charAt(0);
		
		System.out.println(var1);
		System.out.println(var2);
		System.out.println(var3);
	}
}

结果为:

12
12.3
1

上面的操作可以将String字符串转换为相应的数据类型,但是如果字符串中包含非数字的字符内容,转换就会出现错误。因此实际开发中,需要严格对输入字符串进行检测,防止出错。

上面只是将字符串转换为基本数据类型,同样也可以将基本数据类型转换为字符串:

public class Demo {
    public static void main(String args[]) {
		int var1 = 10;
		double var2 = 12.3;
		boolean var3 = true;
		
		String str1 = "" + var1;
		String str2 = "" + var2;
		String str3 = "" + var3;
		
		String str4 = String.valueOf(var1);
		String str5 = String.valueOf(var2);
		String str6 = String.valueOf(var3);
		
		System.out.println(str1);
		System.out.println(str2);
		System.out.println(str3);
		System.out.println(str4);
		System.out.println(str5);
		System.out.println(str6);
	}
}

结果为:

10
12.3
true
10
12.3
true

上面的代码提供了两种基本数据类型转换为String的操作,之前提到字符串和基本数据类型相加会转换为字符串,因此一种操作就是与空字符串进行相加,另一种操作就是使用String中的valueOf方法进行转换。

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值