package params;
public class Test {
//对于基本数据类型是把变量的值传给了函数,并不影响方法外部变量的内容
public void changeInt(int a){
a = 3;
}
/*
* 对于引用类型传递的堆中对象的真实地址,所以方法中的参数同样指向堆中该对象的地址,在方法中改变地址中的内容同样影响方法外部的内容
* 所以在Java中的值传递,不管是基本类型还是引用类型,一律是值传递 pass by value
* 如果是基本类型传递的值就是基本类型的值本身,而引用类型传递的值是内存中的地址
*/
public void changePoint(Point point){
point.x = 5;
point.y = 6;
}
/*
* 此时传递字符串的值是把StringPool中的对象地址传递给方法参数,方法外和方法内的两个引用指向同一个对象(StringPool中的对象地址)
* 但是,在方法内的str改变时,因为字符串是常量,一旦赋值就不能更改,所以方法中的str有重新在StringPool中新建了内容为"abc"的对象并指向它
* 但是方法外部的str始终指向原来的对象,即内容依然是"xyz"
*/
public void changeStr(String str){
str = "abc";
}
public static void main(String[] args) {
int a = 1;
Test test = new Test();
test.changeInt(a);
System.out.println(a);//1
Point point = new Point(1,2);
test.changePoint(point);
System.out.println(point.x);//5
System.out.println(point.y);//6
String str = "xyz";
test.changeStr(str);
System.out.println(str);//xyz
}
}
class Point{
int x;
int y;
public Point(int x,int y) {
this.x = x;
this.y = y;
}
}
Java(值传递)
最新推荐文章于 2019-03-20 02:40:16 发布