基本类与引用类(java)
一,区别
基本类很单纯,就他自己。可以认为是一种特殊的类(class)
引用类就是一种比较正常的class,它里面包装了更小的部分。
就存储方式而言
不像基本类那么单纯,引用类的存储比较复杂。
它仅仅把地址存于栈内存,而把内部细节存于堆内存。
就引值传递而言
基本类作为传入方法(method)的参数时,是复制一份传入,故在改method里对之进行修改时,若不靠返回值,方法执行后,你会发现外面的基本类不会变。
但是,作为引用类,它传入的是它的地址(可以这么理解),在method里面可以通过引用对之进行操作,于是执行完方法后,引用类已经发生了改变。
public class Main{
public static void main(String[] args){
int num1 = 5;
int num2 = 3;
int[] nums = {5, 3};
ExchangeFirst(num1, num2);
System.out.println("第一次交换的结果:" + num1 + "\t" + num2);//此时打印,顺序没有发生改变
ExchangeSecond(nums);
System.out.println("第二次交换的结果:" + nums[0] + "\t" + nums[1]);//此时打印,顺序交换
}
public static void ExchangeFirst(int num1, int num2){//在这个方法里仅仅对int类的copy进行处理,故method外的num1,num2没有交换
int temp = num1;
num1 = num2;
num2 = temp;
}
public static void ExchangeSecond(int[] nums){//此处传了nums
int temp = nums[0];
nums[0] = nums[1];
nums[1] = temp;
}
}
2,联系
int,double等基本量,可已被包装。
For instance, int -> Integer, double -> Double, char -> Character…
包装后他们就光荣地成了引用类的一员了,哈哈~~~~~
double num1 = 3.58;
Double dnum1_1 = num1;//第一种包装方法,自动包装,jdk1.5以后就可以
Double dnum1_2 = valueOf(num1);//第二种包装方法
Double dnum1_3 = 3.58;//其实就是方法1
Double dnum1_4 = new Double("3.14");//方法3,其实不算严格包装