一、引用改变现象
当栈内存中的地址发生了改变的现象,即引用改变现象。
- 对象的创建需要在堆内存中开辟空间保存对象本身信息,还需要在栈中开辟空间保存对象的地址信息。
- 当一块空间失去了栈内存的指向就变成垃圾,之后就等着GC线程来回收。
package com.CoderLB;
public class Main {
public static void main(String[] args) {
Person per1=new Person();
System.out.print(per1.name);
per1.age=10;
per1.name="张三";
per1.weight=70;
per1.height=170;
System.out.print(per1.name);//张三
//创建另一个
Person per2=new Person();
per2.age=18;
per2.name="李四";
per2.weight=70;
per2.height=170;
//操作
per1=per2;
System.out.print(per1.name);//李四
}
}
二、值传递
1.如果方法的参数类型是基本数据类型,则在传递实际参数的时候,本质上将原来的数据复制一个副本传递给方法。那么在方法中修改的值就是一个副本。
常见的基本数据类型
整数型:byte类型 short类型 int类型 long类型
浮点型:float类型 double类型
字符型:char类型
布尔型:boolean类型
public class Hello {
public static void main(String[] args) {
//计算三角形面积
int num1=10;
change(num1);//100
System.out.println("num1: "+num1);//还是10不是100
}
//改变变量的值
public static void change(int temp){
temp*=10;
System.out.println(temp);
}
}
2.如果方法的参数类型不是基本数据类型,则在传递实际参数的时候,对原来的数据产生影响。
public class Hello {
public static void main(String[] args) {
//change(num1);//100
Person per=new Person();
per.name="张三";
change(per);
System.out.println("per: "+per.name);//李四
}
//改变变量的值
public static void change(Person temp){
temp.name="李四";
System.out.println("temp: "+temp.name);//李四
}
}
常见的引用数据类型
Java有 5种引用类型(对象类型):类 接口 数组 枚举 标注
string作为实际参数传递后进行修改。原始数据并未发生改变。因为String类型的特殊性。(存在常量池(待补充))
public class Hello {
public static void main(String[] args) {
String str="hello";
change(str);//"world"
System.out.println("str: "+str);//"hello"
}
//改变变量的值
public static void change(String temp){
temp="world";
System.out.println("temp: "+temp);//world
}
}