变量的引用和变量的值
变量的内容,有可能是一个值,也有可能是指向一个对象的引用。
当变量的类型为基本型别(short, byte, int, long, float, double, boolean, char)时,变量的内容是一个值;当变量的类型为 Object 及其子类时,变量的内容是指向一个对象的引用。
画内存结构图辅助理解值类型和引用类型。
基本数据类型作比较,值相等则相等,值不相等则不相等(忽略数据类型)
引用类型作比较,引用地址相等则相等,否则都是不等的。
int属于基本数据类型,因此在方法中进行传递和引用时,并不会改变该变量的数值
而arr属于数组,是引用数据类型,因此在方法引用时,实际传递的是该数组在堆内存中的物理内存地址,在方法中对该数组进行操作,则会影响到该数组内部的数值,会发生改变.
在java中,基本数据类型作为参数传递的时候叫做值传递,传的是值本身,
值传递:值在该方法中改变属于局部变量改变
当出了该方法就没有作用了(方法中的传递的基本数据类型就属于局部变量)
在 Java 中,凡是可以指向一个对象或包含一个值的标识符,都可以称为变量。
变量的内容,有可能是一个值,也有可能是指向一个对象的引用。
String /基本数据类型包装类,虽然都是引用数据类型,但是在发生传参的时候,它们传的是值
public class TestReference {
public static void main(String[] args) {
//Integer i = new Integer(5);
//System.out.println(i.hashCode());
//int j = 5;
//System.out.println(j.hashCode());
//不能对基本类型调用方法,但可以对引用类型调用方法:
/*
Integer a = 120;
int b= 120;
Integer c = 120;
Integer d = new Integer(120);
System.out.println(a == b); //产生的原因是编译器编译时会调用intValue()自动的将a进行了拆箱,结果肯定是true;
System.out.println(a == c); //true jdk对-128~127之间的值做了缓存。
System.out.println(a == d); //false new Integer(120)构造器会创建新的对象。
Integer e = 128;
Integer f = 128;
System.out.println(e == f); //false 大于128 使用==比较,不相等。
*/
/*
int n=3;
int m=3;
System.out.println(n==m); //直接比较值
String str = new String("hello");
String str1 = new String("hello");
String str2 = new String("hello");
System.out.println(str1==str2); //两个对象
str1 = str;
str2 = str;
System.out.println(str1==str2); //指向了同一个引用
*/
/*
boolean b = false; //值传递
Boolean boo = new Boolean(false);//包装类因为会自动装箱拆箱,所以可以和基本类型一样处理,所以示例中boo的值就是false;
Boolean[] arr = new Boolean[]{false}; // 数组是引用类型,所以arr的值就是指向该Boolean[]的引用。
//java中只有值传递没有引用传递,所以传入getMiddleOne方法的三个参数分别是b的值拷贝, boo的值拷贝, arr的值拷贝。
//java中只有值传递,基本类型传递的是值的副本,引用类型传递的是引用的副本。
getMiddleOne(b, boo, arr);
System.out.println(b);
System.out.println(boo.toString());
System.out.println(arr[0]); //arr的值就是指向该Boolean[]的引用。
*/
}
private static void getMiddleOne(boolean b, Boolean boo, Boolean[] arr) {
b = true;
boo = new Boolean(true);
arr[0] = true;
}
}
https://blog.csdn.net/weixin_42386014/article/details/81121620
https://blog.csdn.net/YidingHe/article/details/4205617