由于集合的使用会用到基础类型,但是集合的元素却是引用类型,
这就要求我们存放数据时将基础类型转化为引用类型.
下边介绍一下各基本数据类型与引用类型的关系
对于基本类型,为了放入集合,必须在堆上开辟空间保存数据,然后把对应的地址放入集合
为了能够把基本类型放入堆上,需要转换为对应的引用类型
系统提供了8个类,和基本数据类型一一对应
// byte – Byte
// short – Short
// int – Integer
// long – Long
// double – Double
// float – Float
// char – Character
// boolean – Boolean
import java.util.ArrayList;
import java.util.zip.Adler32;
public class BasicType {
public static void main(String[] args) {
// 限定ArrayList中只能存储String
// String为引用类型
ArrayList<String> a1 = new ArrayList<String>();
a1.add("abc");
a1.add("efg");
int a = 10;// 存在栈上,不能放入集合中
Integer ai = new Integer(a);// 存在堆上 可以放入集合中
System.out.println("a" + a + "ai" + ai);
// 必须使用基本类型对应的引用类型
ArrayList<Integer> a3 = new ArrayList<Integer>();
a3.add(3);
a3.add(a);
Integer number1 = a3.get(0);
int number2 = a3.get(1);
// 系统为了方便使用,会自动实现基本类型和引用类型之间的相互转换.
int a2 = 30;
Integer ai2 = a2; // 自动从int转换为Integer // new Integer(a2)
int a4 = ai2; // 自动从Integer转换为int // ai2.intValue();
// 系统会自动转换为对应类型 叫做 自动装箱拆箱/拆包解包
int a5 = a2 + ai2 + a4; // 转为int进行计算
Integer ai5 = a2 + ai2 + a4; // 转为int进行计算,把结果转换为Integer
System.out.println(a5 + " " + ai5);
// 装箱/封包:基本类型转换为引用类型
// 拆箱/解包:引用类型转换为基本类型
int a6 = 30;
a3.add(a6); // 1.Integer temp = new Integer(a6); 2.a3.add(temp);
int a7 = a3.get(0); // Integer temp = a3.get(0); 2.int a7 = temp.intValue();
// 集合存不了基本类型,只能存取对应的引用类型
// 集合泛型必须对应的引用类型
ArrayList<Double> a8 = new ArrayList<Double>();
a8.add(12.12);
double a9 = a8.get(0);
}
}
下边是类型转换的使用
public class BasicType2 {
public static void main(String[] args) {
Integer a1 = 2;// new Integer(2)
Integer a2 = 2;
System.out.println(a1 == a2);
Integer a3 = 200;
Integer a4 = 200;
System.out.println(a3 == a4);
// 系统认为-128 - 127之间的整数是非常常用的
// 所以这些数字对应的引用类型是定义为常量的,存放在方法区
// 超出范围的放在堆上
// 尽量不要拿引用类型做等值比较
int a5 = a3;
int a6 = a4;
System.out.println("a5==a6" + (a5 == a6));
Double double1 = 10.5;
Double double2 = 10.5;
System.out.println(double1==double2);// 小数是无效的
// Boolean的值也是两个常量
Boolean b1 = true;
Boolean b2 = true;
System.out.println(b1==b2);
// 基本类型和String之间的转换
// 基本类型转String
String t1 = String.valueOf(10);
String t2 = String.valueOf(5.5);
String t3 = String.valueOf(false);
// String 转基本类型:引用类型.parse类型();
int all = Integer.parseInt("10000");
double dl1 = double2.parseDouble("5.5");
boolean bl1 = Boolean.parseBoolean("true");
}
}