概述
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方法进行转换。
最后
以上就是潇洒美女为你收集整理的JAVA基础编程——基本数据类型的包装类的全部内容,希望文章能够帮你解决JAVA基础编程——基本数据类型的包装类所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复