包装数据类型
8种包装数据类型
Integer、Long、Float、Short、Byte、Character、Double、Boolean、BigInteger、BigDecimal,其中BigInteger、BigDecimal没有相对应的基本类型,主要用于高精度运算。
BigInteger支持任意精度BigDecimal支持任意精度带小数点的运算。
//byte Byte
//short Short
//int Integer
//long Long
//float Float
//double Double
//char Character
//boolean Boolean
public class Demo01 {
public static void main(String[] args) {
//int i=100;
//换算成二进制
//Integer(int value)
Integer integer=new Integer(99);
//static String toBinaryString(int i) 返回二进制
System.out.println(Integer.toBinaryString(100));
//十六进制
System.out.println(Integer.toHexString(100));
//int的最大范围
System.out.println(Integer.MAX_VALUE);
}
}
int-String的相互转换
//int-String的相互转换
public class Demo01 {
public static void main(String[] args) {
//int-String
//方式一
int number=99;
String s1=""+number;
//方式2
// static String valueOf(int i)
// 返回 int 参数的字符串表示形式。
String s2=String.valueOf(number);
//方式3
Integer i=new Integer(number);
String s3=i.toString();
//方式4
// static String toString(int i)
// 返回一个表示指定整数的 String 对象。
String s4=Integer.toString(i);
//String --- int
String s5="100";
Integer i1=new Integer(s5);
//int intValue()
//以 int 类型返回该 Integer 的值。
int i3=i1.intValue();
//方式2
//static int parseInt(String s)
int i2 = Integer.parseInt(s5);
}
}
自动拆箱和装箱
自动装箱是Java编译器在Java原生类型和对应的对象包装类型上做的自动转换。
把int装换成Integer double转换成Double
如果反过来就叫自动拆箱。
例、一般我们创建一个类的实例对象时会这样:
Class a =new Class(parameter)
当我们创建一个Integer对象时,直接可以这样:
Integer i=100;
实际上,执行上面代码时系统为我们执行了:Integer i=Integer.valueOf(100);
这就是基本数据类型的自动装箱功能。
自动拆箱:就是将对象中的基本数据类型从对象中自动取出。如下
Inter i = 10;//装箱
int t = i;//拆箱,实际上执行了int t = i.intValue()
public class Demo02 {
public static void main(String[] args) {
// static Integer valueOf(int i)
// 返回一个表示指定的 int 值的 Integer 实例
//Integer i = Integer.valueOf(99);
//自动装箱 通过Integer.valueOf()自动把一个基本数据类型转换成包装数据类型
Integer i=99;
//自动拆箱 把一个包装数据类型通过intValue()变成一个基本数据类型
//先拆箱进行计算,然后把结果在进行装箱
//i = Integer.valueOf(i.intValue() + 200);
i=i+200;
Long l=99l;
}
}
Integer缓冲池
Integer缓存是Java5中引入的一个有助于节省内存、提高性能的特性。
Integer中有个静态类IntegerCache,里面有一个cache[ ],这就是Integer常量池,其大小为(-128~127)。
Integer初始化的时候会创建一个数组,这个数组会提前把-128到127的包装数据类型都提前放到数组里面,如果现在调用Intger.valueOf方法,符合这个范围不会new新的Integer对象,会从数组中直接获取。如果不是这个范围才会new
public class Demo03 {
public static void main(String[] args) {
Integer i1=new Integer(127);
Integer i2=new Integer(127);
System.out.println(i1==i2);//false
System.out.println(i1.equals(i2));//true
System.out.println("----------");
Integer i3=new Integer(128);
Integer i4=new Integer(128);
System.out.println(i3==i4);//false
System.out.println(i3.equals(i4));//true
System.out.println("----------");
// Integer i5 = Integer.valueOf(128);
// Integer i6 = Integer.valueOf(128);
Integer i5=128; //自动装箱
Integer i6=128;
System.out.println(i5==i6);//false
System.out.println(i5.equals(i6));//true
System.out.println("----------");
// Integer i7 = Integer.valueOf(127);
// Integer i8 = Integer.valueOf(127);
Integer.valueOf(127);
Integer i7=127;
Integer i8=127;
System.out.println(i7==i8);//true
System.out.println(i7.equals(i8));//true
}
}