JDK 5.0之前
基本数据类型<—->包装类:调用包装类的构造器(代码里有知识点和注意点)
转换目的:有了类的特点,就可以调用类中的方法
public class WrapperTest {
// 基本数据类型--->包装类:调用包装类的构造器
@Test
public void test1() {
int num1 = 10;
Integer in1 = new Integer(num1);
System.out.println(in1.toString());//10
Integer in2 = new Integer("123");
System.out.println(in2.toString());//123
// 报异常:NumberFormatException
Integer in3 = new Integer("123abc");//调用Integer必须全是数字
System.out.println(in3.toString());
//有点特殊:因为底层源码 return ((s != null) && s.equalsIgnoreCase("true"));
Boolean b1 = new Boolean(true);
Boolean b2 = new Boolean("True");//true
System.out.println(b2);
Boolean b3 = new Boolean("true123");//flase
Order order = new Order();
System.out.println(order.isMale);//false//因为基本数据类型的默认初始化值为:false
System.out.println(order.isFamale);//null//此时为引用数据类型(类),默认初始化值:null
}
}
class Order {
boolean isMale;
Boolean isFamale;
}
包装类—>基本数据类型:调用包装类的xxxValue()
转换目的:就可以进行加减乘除的运算
public class WrapperTest {
@Test
public void test2() {
Integer in1 = new Integer(12);
int i1 = in1.intValue();
System.out.println(i1 + 1);//13
Float f1 = new Float(12.3);
float f2 = f1.floatValue();
System.out.println(f2 + 1);//13.3
}
}
JDK5.0之后
自动装箱:本质是替换之前的调用包装类的构造器
自动拆箱:本质是替换之前的调用包装类的xxxValue()
public class WrapperTest {
@Test
public void test3() {
//自动装箱
int num2 = 10;
Integer in1 = num2;
boolean b1 = true;
Boolean b2 = b1;
//自动拆箱
System.out.println(in1.toString());
int num3 = in1;
}
}
对于包装类而言(以int为例),自动装箱时,使用Integer.valueOf(int i)方法;JVM会创建一个缓存处理对于[-128,127]的取值,Integer会缓存对象(String常量池)超过这个范围就创建新的Integer对象。
Integer i1 = 10;//第一次出现,创建对象进入常量池
Integer i2 = 10;//第二次出现,复用上面对象
到底什么时候用基本类型,啥时候用包装类?基本类型的默认值有时候是个挺烦的事。
阿里编码规约:
1.在类中定义成员变量,必须使用包装类声明。
现在开发的是一个银行卡系统;肯定会有用户的卡号和余额(浮点数)
double sal;//默认值是0.0 -> 到底是正常使用状态余额0还是这个用户已经注销了?
Double sal;//默认是null,变为null即可。
将来要把类的成员变量存储到数据库中,默认值经常造成干扰。利用null来判断是否数值存在!
2.方法中大量进行算术运算,使用基本类型。
基本数据类型、包装类—->String类型:调用String重载的valueOf(Xxx xxx)
public class WrapperTest {
@Test
public void test4() {
//方式一:连接运算
int num1 = 10;
String str1 = num1 + "";
//方式二:调用String的valueOf(Xxx xxx)
float f1 = 12.3f;
String str2 = String.valueOf(f1);
Double d1 = new Double(12.4);
String str3 = String.valueOf(d1);
System.out.println(str2);//"12.3"
System.out.println(str3);//"12.4"
}
}
注意点:“+”运算符是最简单、最快捷,也是使用最多的字符串连接方式。在使用”+”运算符连接字符串和int型(或double型)数据时,“+”将int(或double)型数据自动转成String类型。
String—>基本数据类型、包装类:调用包装类的parseXxx(String s)
public class WrapperTest {
@Test
public void test5() {
String str1 = "123";
int num2 = Integer.parseInt(str1);//若为"123a",则会报NumberFormatException
System.out.println(num2 + 1);
String str2 = "true";
boolean b1 = Boolean.parseBoolean(str2);//非true,即flase
System.out.println(b1);
}
注意:转换时,可能会报NumberFormatException
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/110974.html