知识点:
1.基本数据类型包装类的定义:
2.数据的装箱与拆箱;
3.数据类型的转换;
具体内容:
1.认识包装类:
java最初设计的基本原则是:一切皆对象,一切的操作都要求用对象的形式进行描述。但是这会出现一个矛盾,即基本类型不是对象。那么为了符合原则,所以最初就是利用认为的方式来解决这种问题的。
代码:
package 面试题目;
public class MyInt { //一个类
private int num; //这个类包装的基本数据类型
//构造的目的是为了将基本数据类型传递给对象
public MyInt(int num){ //将基本类型包装类
this.num = num;
}
public int intValue(){ //将包装的数据内容返回
return this.num;
}
}
package 面试题目;
public class TestDemo {
public static void main(String[] args) {
MyInt mi = new MyInt(10); //将Int包装为类
int temp = mi.intValue(); //将数据中包装的内容取出
System.out.println(temp*2);
}
}
以上的转变是比较容易实现了,java为了方便用户的使用,所以专门提供了一组包装类,来包装所有的基本类型。
基本类型的数据有:byte(Byte)、short(Short)、int(Integer)、long(Long)、float(Folat)、double(Double)、char(Character)、boolean(Boolean)。
包装类的两种类型:
对象型包装类(Object直接子类):Character、Boolean
数值型包装类(Number直接子类):Byte、Short、Integer、Float、Double、Long
Number是一个抽象类,里面一共定义了六个操作方法:intValue()、doubleValue()、floatValue()、byteValue()、shortValue()、longValue()
2.装箱与拆箱
现在已经存在有基本数据类型与包装类了,那么这两种变量之间的转换就通过一下方式定义:
- 装箱操作:将基本数据类型变化为包装类的形式
每个包装类的构造方法都可以接收各自的类型的变量;
- 拆箱操作:从包装类中取出被包装的数据;
利用Number类中提供的一系列的:xxxValue()方法完成;
范例:使用Int和Integer
package 面试题目;
public class TestDemo {
public static void main(String[] args) {
Integer obj = new Integer(10); //将基本类型装箱
int temp = obj.intValue(); //将基本类型拆箱
System.out.println(temp*2);
}
}
之前编写的是MyInt类,现在换成了Integer这个系统类。
范例:使用double和Double
package 面试题目;
public class TestDemo {
public static void main(String[] args) {
Double obj = new Double(10.2); //将基本类型装箱
Double temp = obj.doubleValue(); //将基本类型拆箱
System.out.println(temp*2);
}
}
范例:boolean和Boolean(不是Number子类)
package 面试题目;
public class TestDemo {
public static void main(String[] args) {
Boolean obj = new Boolean(true); //将基本类型装箱
Boolean temp = obj.booleanValue(); //将基本类型拆箱
System.out.println(temp);
}
}
以上统一的操作是JDK1.5的。在jdk1.5以后提供了自动装箱与自动拆箱机制,并且可以直接利用包装类的对象进型数学计算。
范例:自动装箱与自动拆箱
package 面试题目;
public class TestDemo {
public static void main(String[] args) {
Integer obj = 10; //自动装箱
int temp = obj; //自动拆箱
obj++ ; //包装类直接进行数学计算
System.out.println(temp*obj);
}
}
如果可以直接利用包装类进行计算,那么就省略勒手工的拆箱部分。
注意:Integer类对象身上发现可以直接赋予内容,也可以利用构造方法?
package 面试题目;
public class TestDemo {
public static void main(String[] args) {
Integer obja = 10; //直接赋值
Integer objb = 10;
Integer objc = new Integer(10);
System.out.println(obja == objb); //true
System.out.println(obja == objc); //false
System.out.println(objb == objc); //false
System.out.println(objc.equals(obja)); //true
}
}
判断内容是否相同需要使用equals()方法。
提示:Object可以统一天下了
Object可以接受一切的引用数据类型,但是由于存在有自动装箱机制,那么Object也可以存放基本类型了。
流程:基本数据类型——>自动装箱(成为对象)——>向上转向为Object
package 面试题目;
public class TestDemo {
public static void main(String[] args) {
Object obj = 10; //先包装再转换
//Object不可能直接向下转向为int
int temp =(Integer)obj; //向下转向为Integer
System.out.println(temp*2);
}
}
doubel
package 面试题目;
public class TestDemo {
public static void main(String[] args) {
Double obj = 10.0;//这里直接写10会被认为是int,因此必须写10.0
System.out.println(obj*2);
}
}
boolean
package 面试题目;
public class TestDemo {
public static void main(String[] args) {
Boolean flag = true ; //自动装箱
if(flag){ //直接拆箱判断
System.out.println("hello world!");
}
}
}
有了以上的自动装箱和拆箱支持之后,在数据类型的选择上就方便了许多。
3.数据类型转换(核心)
包装类使用最多的是其数据类型转换功能,里面有将String数据变为基本类型的方法。
Integer类:public static int parseInt(String s);
Double类:public static double parseDouble(String s);
Boolean类:public static boolean parseBoolean(String s);
特别注意的是Character类里面并不存在有字符为字符的方法,因为String类有一个charAt()的方法可以更具索引取出字符内容。
范例:将字符串变为int型数据
package 面试题目;
public class TestDemo {
public static void main(String[] args) {
String str = "123";
int temp = Integer.parseInt(str);
System.out.println(temp*2);
}
}
此时实现了字符串变为基本类型的操作,但是在这样的转换过程中请一点光要注意:转换成数字的字符串一定要由数字组成。
范例:错误代码
package 面试题目;
public class TestDemo {
public static void main(String[] args) {
String str = "1a23";
int temp = Integer.parseInt(str);
System.out.println(temp*2);
}
}
Exception in thread "main" java.lang.NumberFormatException: For input string: "1a23"
范例:观察Doubel转换
package 面试题目;
public class TestDemo {
public static void main(String[] args) {
String str = "1.23";
Double temp = Double.parseDouble(str);
System.out.println(temp*2);
}
}
没有小数点也可以转换。
范例:观察boolean转换
package 面试题目;
public class TestDemo {
public static void main(String[] args) {
String str = "true";
Boolean flag = Boolean.parseBoolean(str);
if(flag){
System.out.println("**满足条件!**");
} else{
System.out.println("**不满足条件!**");
}
}
}
如果进行转换的时候,boolean对象不是true或者false,那么统一进行false处理。
基本类型变为字符串:
两种做法:方式一:任何基本数据类型与字符串使用了"+"操作之后都表示变为字符串;
package 面试题目;
public class TestDemo {
public static void main(String[] args) {
int num = 100;
String str = num+"";
System.out.println(str.replaceAll("0","6"));
}
}
这样的操作虽然可以简单的完成,但是会存在有垃圾问题(" ")。
方式二:public static String valueOf(数据类型 变量);
package 面试题目;
public class TestDemo {
public static void main(String[] args) {
int num = 100;
String str = String.valueOf(num);
System.out.println(str.replaceAll("0","6"));
}
}
总结:1.jdk1.5之后才会提供自动装箱与拆箱操作。
2.字符串与基本类型的相互转换:
- 字符串变为基本类型,依靠包装类的parseXxx()方法
- 基本数据类型变为字符串,依靠String.valueOf(基本数据类型) 方法。