包装类 ->基础数据类型的封装。
实际开发过程中,我们经常会遇到需要使用对象,而不是内置数据类型的情形。为了解决这个问题,Java 语言为每一个内置数据类型提供了对应的包装类。
int -> Integer
short -> Short
byte -> Byte
long -> Long
float -> Float
double -> Double
char -> Character
boolean -> Boolean
1.自动封箱和自动拆箱 指基本数据类型和对应的包装类之间可以直接转换
public class Main {
public static void main(String[] args) {
byte b1 = 1;
short s1 = 1;
int i1 = 1;
long l1 = 1L;
float f1 = 1.0f;
double d1 = 1.0;
char c1 = 'a';
boolean bl1 = true;
//自动封箱,等同于 Integer I = new Integer(i); 忽略new这个过程就是自动封箱
Byte B = b1;
Short S = s1;
Integer I = i1;
Long L = l1;
Float F = f1;
Double D= d1;
Character C= c1;
Boolean BL = bl1;
//自动拆箱,可以直接将包装类对象赋值给对应的基础类型
byte b2 = B;
short s2 = S;
int i2 = I;
long l2 = L;
float f2 = F;
double d2 = D;
char c2= C;
boolean bl2 = BL;
}
}
2.常用方法
2.1 equals(Object o) 比较两个对象的值是否相同,需要注意的是比较之前会校验对象是否相同,即使Byte和Integer两个对象的值相同但equals方法的返回依旧是false。
2.2 xxxValue() 这里的xxx是泛指,该方法主要用于数值类型转换,返回值是基础类型。这里用Integer举例
public class Main {
public static void main(String[] args) {
Integer i1 = 1;
int i = i1.intValue();
byte b = i1.byteValue();
short s = i1.shortValue();
long l = i1.longValue();
double d = i1.doubleValue();
float f = i1.floatValue();
}
}
2.3 valueOf(String str) 将入参转换为对应包装类类型,入参可以是String类型/对应基本类型
public class Main {
public static void main(String[] args) {
//入参是对应基本类型,返回值是Integer
Integer i1 = Integer.valueOf(1);
//入参是String
Integer i2 = Integer.valueOf("1");;
//当入参是String时可以规定进制
Integer i3 = Integer.valueOf("1",2);
int i =1;
double d = 1.0;
//会报错,需要强制类型转换成int
Byte.valueOf(i);
//不回报错,入参已经隐式类型转换成了long
Long.valueOf(i);
//会报错,Boolean的valueOf只允许传入boolean和String
Boolean.valueOf(i);
//会报错,Boolean的valueOf只允许传入char和String
Character.valueOf(i);
//不会报错,已经隐式类型转换
Double.valueOf(i);
//会报错,需要强制类型转换
Float.valueOf(d);
//会报错,需要强制类型转换
Integer.valueOf(d);
}
}
2.4 toSting() 以字符串形式返回值。
2.5 parseXxx(String str) 这里的Xxx是泛指,入参为String,返回值是对应的基础类型,用于类型转换
public class Main {
public static void main(String[] args) {
//将字符串转为基本数据类型
byte b = Byte.parseByte("1");
short s =Short.parseShort("1");
int i = Integer.parseInt("1");
long l = Long.parseLong("1");
float f = Float.parseFloat("1");
double d =Double.parseDouble("1");
boolean bl =Boolean.parseBoolean("true");
}
}
注意:parseXxx(String str) 和Xxx.valueOf(String str)两个方法
前者返回的是基本数据类型,后者返回的是包装类。
虽然可以通过自动拆箱,自动封箱完成包装类和基本数据类型之间的转换,但最好根据实际需求使用不同的方法。
Xxx.valueOf(String str)方法底层逻辑是先将传入的String字符串通过parseXxx(String str)方法转成对应基本类型,
再new一个新对象把值传进去,所以parseXxx(String str)要更好