java具有对象的思想,但是基本数据类型不是面向对象
而且基本数据类型带的功能比较薄弱
因此,java在JDK1.5的时候为每个基本数据类型定义了对应的包装类
具体如下:
Byte–>byte
Short–>short
Integer–>int
Long–>long
Float–>float
Double–>double
Character–>char
Boolean–>boolean
包装类的转换例子:
public class Intdemo {
public static void main(String[] args) {
System.out.println("--------1--------");
//int类型转换成包装类,可以调用Integer和Object方法
int i=10;
Integer i1=new Integer(i);
System.out.println(i1);
//String-->int
System.out.println("-------2-------");
String s1="123";
// String s1="abc";//NumberFormatException
//String类型转换成int类型的前提是String里的内容是数字,不能是字母
Integer i2=new Integer(s1);
System.out.println(i2);
}
}
包装类转换的方法
int --> String
String --> int
public class IntStringdemo {
public static void main(String[] args) {
//int --> String 的方式
System.out.println("--------1-------");
//方式1
int num=100;
String s1=""+num;
System.out.println(s1+"----"+num);
System.out.println("----------2--------");
//方式2
String s2=String.valueOf(num);
System.out.println(s2+"----"+num);
System.out.println("--------3--------");
//方式3
//int --> Integer -->String
Integer i=new Integer(num);
String s3=i.toString();
System.out.println("s3:"+s3);
System.out.println("--------4-------");
//方式4
String s4=Integer.toString(num);
System.out.println("s4:"+s4);
//String -- int
System.out.println("-----5--------");
//方式1
//String -- Integer -- int
String s5="100";
Integer i1=new Integer(s5);
int x1=i1;
System.out.println("x1:"+x1);
//方式2
System.out.println("-------6------");
int x2=Integer.parseInt(s5);
System.out.println("x2:"+x2);
}
}
JDK5的新特性:
自动装箱:自动把基本数据类型转换成包装类
自动拆箱:把包装类型转换成基本数据类型
public class Intdemo1 {
public static void main(String[] args) {
//定义一个int类型的包装类
Integer i1=new Integer(100);
System.out.println("i1:"+i1);
System.out.println("-------1------");
Integer i2=100;
System.out.println("i2:"+i2);
//上一行代码相当于System.out.println("i2:"+i2.intValue());自动拆箱,把包装类的i2转换成基本数据类型
//通过反编译工具反编译后得到的真实源码
//Integer i2=Integer.valueOf(100);//自动装箱的真实过程
//System.out.println(new StringBuider("i2:")).append(i2).toString());
Integer i3=null;
//Integer是一个对象,null是空对象,把null赋值给对象,就是不给对象开辟空间
System.out.println(i3);
//直接输出并不会报错,因为没有使用它
// i3++;
// System.out.println(i3);
//将i3进行运算后进行输出,则会报错(空指针异常)NullPointerException
//因此我们需要对其进行判断,再进行运算
if(i3 != null) {
i3++;
}else {
System.out.println("要出异常啦");
}
}
}
效率问题:
public class Intdemo2 {
public static void main(String[] args) {
Integer i1=new Integer(127);
Integer i2=new Integer(127);
System.out.println(i1==i2);//比较地址值
System.out.println(i1.equals(i2));//比较值
//通过查看valueOf();方法的源码,当传入的数值在-128~127之间,就会做一个数据缓冲池;
//如果改数据范围在缓冲池范围内就直接返回,否则就要开辟新的空间,效率相对较慢
Integer i3=Integer.valueOf(127);
}
}