1、包装类理解
有了int、double这些,为什么还要有相对应的包装类呢?
因为int、double不是类,不能够通过实例化对象来调用方法,将其包装成Integer、Double可以使用相应的方法,可以有继承、有多态,符合面向对象的思想。
2、基本数据类型、包装类、String之间转换
基本数据类型—>包装类:
Integer in1 = new Integer(12);
Integer in2 = new Integer(“12”);
Float f1 = new Float(12.3f);
Float f2 = new Float(“12.3”);
注意:
Boolean b1 = new Boolean(true):
Boolean b2 = new Boolean(“true”);
// 下面是返回false
Boolean b3 = new Boolean(“true123”);
包装类–>基本数据类型:
in1.intValue(); // 返回值就是int型
f1.floatValue(); // 返回是float
自动装箱和自动拆箱:不需要显示转换
基本数据类型、包装类–>String:
方式1:连接运算
例:int num = 1;
String str = 1 + “”;
方式2:String.valueOf(xxx),基本数据类型和包装类都可以作为参数传入。
String–>基本数据类型、包装类:
需要调用包装类中的方法
例:
String str = “123”;
Integer.parseInt(str);
坑题:
Integer m = 1;
Integer n = 1;
判断m == n,
m == n是true,wtf?“==”不是比较地址的吗?
因为在Integer对于-128~127实现了cache数组,如果是在这个范围的数字,直接从cache进行提取,也就是比较时都是同一个对象。
如果m和n都等于128,那么就需要重新new两个对象,它们地址也不相同。