加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java静态方法参数

发布时间:2020-12-15 01:59:40 所属栏目:Java 来源:网络整理
导读:为什么以下代码返回100 100 1 1 1而不是100 1 1 1 1? public class Hotel {private int roomNr;public Hotel(int roomNr) { this.roomNr = roomNr;}public int getRoomNr() { return this.roomNr;}static Hotel doStuff(Hotel hotel) { hotel = new Hotel(1
为什么以下代码返回100 100 1 1 1而不是100 1 1 1 1?

public class Hotel {
private int roomNr;

public Hotel(int roomNr) {
    this.roomNr = roomNr;
}

public int getRoomNr() {
    return this.roomNr;
}

static Hotel doStuff(Hotel hotel) {
    hotel = new Hotel(1);
    return hotel;
}

public static void main(String args[]) {
    Hotel h1 = new Hotel(100);
    System.out.print(h1.getRoomNr() + " ");
    Hotel h2 = doStuff(h1);
    System.out.print(h1.getRoomNr() + " ");
    System.out.print(h2.getRoomNr() + " ");
    h1 = doStuff(h2);
    System.out.print(h1.getRoomNr() + " ");
    System.out.print(h2.getRoomNr() + " ");
}
}

为什么它似乎将Hotel by-value传递给doStuff()?

解决方法

它完全按照你的要求去做:-)

Hotel h1 = new Hotel(100);
System.out.print(h1.getRoomNr() + " "); // 100
Hotel h2 = doStuff(h1);
System.out.print(h1.getRoomNr() + " "); // 100 - h1 is not changed,h2 is a distinct new object
System.out.print(h2.getRoomNr() + " "); // 1
h1 = doStuff(h2);
System.out.print(h1.getRoomNr() + " "); // 1 - h1 is now changed,h2 not
System.out.print(h2.getRoomNr() + " "); // 1

正如其他人所指出的那样(并且非常清楚地解释了in this article),Java通过了价值.在这种情况下,它将引用h1的副本传递给doStuff.在那里,副本被新引用覆盖(然后返回并分配给h2),但是h1的原始值不受影响:它仍然引用第一个房间号为100的Hotel对象.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读