java对象传递_将对象传递给方法java

我正在使用三个对象:StringBuilder,Integer和testobject – 它们被传递给一个方法来改变它的状态.

正如所料,StringBuilder和testobject指向同一个对象,状态发生了变化,但它不适用于Integer对象.

class testobject{

int x = 1;

}

public class test{

public static void main(String[] args){

StringBuilder s1 = new StringBuilder("String");

go(s1);

System.out.println(s1);

Integer s2 = new Integer("20");

go1(s2);

System.out.println(s2);

testobject s3 = new testobject();

go2(s3);

System.out.println(s3.x);

}

static void go(StringBuilder s1){

s1.append("Builder");

}

static void go1(Integer s2){

s2 = 1;

}

static void go2(testobject s3){

s3.x = 5;

}

结果:

StringBuilder

20

5

预期结果:

StringBuilder

1

5

解决方法:

看看你的三种方法:

static void go(StringBuilder s1){

s1.append("Builder");

}

static void go1(Integer s2){

s2 = 1;

}

static void go2(testobject s3){

s3.x = 5;

}

在go和go2中,您正在修改参数值所引用的对象.

在go1中,您正在更改参数变量本身的值.这是非常不同的,因为Java always uses pass-by-value,调用者看不到这种变化.

重要的是要理解对象根本不会传递给方法.相反,引用是. s1,s2和s3的值都是引用.如果你把变量想象成纸片,那么每张纸上都有一个房子地址,它是从一张宣称在主页上的纸张复制而来的.

go和go2的方法体就像访问地址在纸上的房子,并在前门上画画.如果您使用原始纸张访问房屋,您仍然可以看到前门上的新颜色.

go1的方法体就像涂写在纸上的地址,然后在那里写一个新地址.这不会改变房子,也不会改变原始的纸张.

标签:java

来源: https://codeday.me/bug/20190529/1176514.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值