java 值_Java(值传递)

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;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值