package com.collection.jdk15;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
/*
JDK1.5新特性 ---> 自动装箱和自动拆箱
java是面向对象的语言,任何事物都可以使用类进行描述;于是sun公司就使用了一些类描述java中八种数据类型;
基本数据类型 包装类型
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
*/
public class Demo4 {
// 基本数据类型存在包装类的好处:
@Test
public void test1(){
String str = "12";
// 字符串转换成int数据类型;
int i = Integer.parseInt(str);
System.out.println(i+1);
// 把数字转换成字符串
String s = Integer.toString(i);
System.out.println(s);
// 把整数转换成对应的进制形式
System.out.println("10的二进制:" + Integer.toBinaryString(10));
System.out.println("10的八进制:" + Integer.toOctalString(10));
System.out.println("10的十六进制:" + Integer.toHexString(10));
// 可以把字符串当成对应的进制数据转换成十进制数据
String data = "1010";
int a1 = Integer.parseInt(data); // 默认是把数据当成十进制
int a2 = Integer.parseInt(data, 2); // 将data对应的数据当成二进制数据
int a3 = Integer.parseInt(data, 8); // 将data对应的数据当成八进制数据
int a4 = Integer.parseInt(data, 16); // 将data对应的数据当成十六进制数据
System.out.println("a1:" + a1);
System.out.println("二进制1010对应的十进制数:" + a2); // 10
System.out.println("八进制1010对应的十进制数:" + a3); // 520
System.out.println("十六进制1010对应的十进制数:" + a4);// 4112
}
// 自动装箱:
@Test
public void test2(){
// 向集合中添加整型数据
// List<int> list = new ArrayList<int>(); // 错误;集合中只能存储对象类型的数据,不能存储基本数据类型的数据
List<Integer> list = new ArrayList<Integer>();
list.add(12);
list.add(3);
// jdk1.4以前的写法:
list.add(new Integer(33));
list.add(new Integer(123));
/*
问题:集合是可以存储任意对象类型数据的容器;那么,上面为什么能够存储基本数据类型的数据?
在jdk1.5之前,上面这种写法是会报错的;但是jdk1.5以后,出现了自动装箱的技术;
自动装箱:自动把java的基本数据类型的数据转换成对象类型的数据;
*/
int a = 10;
Integer b = a; // 自动装箱;把基本数据类型的数据赋值给引用类型的数据;
Integer c = new Integer(a); // jdk1.5以前的写法;
}
// 自动拆箱
@Test
public void test3(){
// 创建一个引用类型的数据
Integer i = new Integer(22);
// 自动拆箱:将引用类型的数据转换成基本数据类型的数据;
int a = i;
System.out.println("a:" + a);
// jdk1.4以前的写法:将引用类型的数据转换成基本数据类型的数据;
int b = i.intValue();
System.out.println("b:" + b);
}
@Test
public void test4(){
/*
Integer内部维护了一个缓冲数组,该缓冲数组存储的数据范围是-128~127;
如果指定的数据是在这个范围之内的,那么就直接冲缓存中获取数据;
如果指定的数据超出这个范围了,那么就需要重新创建新的对象存储数据了;
*/
Integer a = 120;
Integer b = 120;
System.out.println("是同一个对象吗?" + (a == b)); // true
Integer m = 128;
Integer n = 128;
System.out.println("是同一个对象吗?" + (m == n)); // false
}
}