针对8中基本数据类型相应的引用类型——包装类,有了类的特点,就可以调用类中的方法是
基本数据类型 | 包装类 |
boolean | Boolean |
char | Character |
byte | Byte |
short | Short |
int | Interger |
long | Long |
float | Float |
double | Double |
- 案例展示
int与Interger之间的转换,jdk5之前采用手动装箱与拆箱,其中装箱:基本数据类型——>包装类型,相反的则为拆箱。而jdk5之后采用自动装箱与拆箱的方法。自动装箱底层掉哦用的valueof()方法,比如Interger.valueOf()。
package Learn;
public class Test{
public static void main(String[] args) {
//手动装箱
int i=1000;
//Integer integer=new Integer(i);
//或者
Integer integer1=Integer.valueOf(i);
//手动拆箱
int g=integer1.intValue();
/*jdk5之后,就可以自动装箱和自动拆箱了,从本质上来说,其底层还是调用的valueOf()方法
这是jdk5之后的源码,仍旧可以方法返回了一个valueOf方法
*@IntrinsicCandidate
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
*
* */
Integer integer2=i;
//自动拆箱
int n1=integer2;
}
}
- 练习
结果为1.0,其中三元运算符为一个整体,所以最终要进行类型提升,最终的输出类型为double类型。
package Learn;
public class Test{
public static void main(String[] args) {
Object obj=false;
System.out.println(obj.equals(false)?new Integer(1):new Double(1.2));
}
}
- 包装类型与String类型的转换
package Learn;
public class Test{
public static void main(String[] args) {
//自动装箱
Integer i=1;
//第一种转换方式
String n1=i+"";
//第二种转换方法
String n2=i.toString();
//第三种方法,使用valueof方法,由于此方法需要传入一个对象,而我们包装之后便是存在一个对象
String n3=String.valueOf(i);
String n4="12345";
//String类型转换成int类型
//第一种public static int parseInt(String s) throws NumberFormatException {
// return parseInt(s,10);
// }
Integer n5=Integer.parseInt(n4);
//第二种,利用Integer自带的构造器
Integer n6=new Integer(n4);
}
}
- 常用的方法
package Learn;
public class Test{
public static void main(String[] args) {
Integer n1=100;
Integer n2=1000;
System.out.println(Integer.MAX_VALUE);
//输出Integer范围的最大值与最小值
System.out.println(Integer.MIN_VALUE);
//判断是不是字母,数字
System.out.println(Character.isDigit('a'));
System.out.println(Character.isLetter('a'));
System.out.println(Character.isUpperCase('a'));
System.out.println(Character.isLowerCase('a'));
//转换大小写
System.out.println(Character.toUpperCase('a'));
System.out.println(Character.toLowerCase('a'));
}
}
- 练习
package Learn;
public class Test{
public static void main(String[] args) {
Integer n1=new Integer(100);
Integer n2=new Integer(100);
//在这里将其封装new一个对象,但是n1与n2对象不相等,但是值相等,===比较的是对象,equal比较值
System.out.println(n1==n2);
System.out.println(n1.equals(n2));
/*在这里我们知道自动转换类型使用了valueof方法,在这里当我们传输的i对象在范围(-128-127)之间时,
我们返回的是数字,但是当不满足源码中的条件时,则返回一个new对象,这也就解释了下面两组数据同样的赋值方法,结果不同的原因
* public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}*/
Integer integer = 100;
Integer integer1 = 100;
System.out.println(integer==integer1);
System.out.println(integer.equals(integer1));
Integer integer3= 1000;
Integer integer4 = 1000;
System.out.println(integer3==integer4);
System.out.println(integer3.equals(integer4));
}
}
但是注意只要存在基本数据类型,==就是判断的值是否相等,就不要去管对象的事情了。