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对象. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读