所以在课堂上我的老师说第2行和第3行都传递了对象的引用 我问她为什么第3行没有直接传入一个物体,我对她的说法并不十分相信 你能否告诉我她是对还是错,并为这两种情况提供某种证据?
JFrame frame = new JFrame(); //line 0
JLabel label = new JLabel("hello"); //line 1
frame.add(label); //line 2
frame.add(new JLabel("goodbye")); //line 3
答案 0 :(得分:4)
Java只传递Object引用,也就是说,引用实际上是通过值传递的,这可能会令人困惑。在Java中没有“直接传入对象”这样的东西。
传入的是表示引用的值,在这种情况下,第3行是未命名或匿名,在方法范围内,其名称为表示该引用的method参数的名称。
答案 1 :(得分:3)
Java中的所有内容都是通过值传递的,甚至是引用。在第2行,当您传入label
时,会创建一个新引用,该引用指向与label
指向的对象相同的对象。在第3行,发生了类似的事情;只是它不明确。
答案 2 :(得分:0)
可以这样做:
frame.add(new JLabel("hello")); //line 2
frame.add(new JLabel("goodbye")); //line 3
或者:
JLabel label = new JLabel("hello");
JLabel label2 = new JLabel("goodbye");
frame.add(label); //line 2
frame.add(label2); //line 3
无论哪种方式,都会传递对象的引用。在第一个版本中,对象引用被创建为参数。你只需要将引用存储在变量中,它就可以立即传递。我觉得你的老师是对的。最好给她带一个苹果。