0

所以在课堂上,我的老师说第 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
4

3 回答 3

4

Java 只传递对象引用,也就是说,引用实际上是按值传递的,这可能会造成混淆。Java中没有“直接传入对象”这样的东西。

传入的是一个表示引用的值,在这种情况下,第 3 行是unnamedanonymous,在方法的范围内,它的名称是表示该引用的方法参数的名称。

于 2013-04-17T17:21:20.993 回答
3

Java 中的所有内容都是按值传递的,甚至引用。在第 2 行,当您传入 时,会创建一个新引用,该引用指向与 one 所指向label的对象相同的对象。label在第 3 行,发生了类似的事情;只是它不明确。

于 2013-04-17T17:20:55.470 回答
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

无论哪种方式,对对象的引用都会被传递。在第一个版本中,对象引用被创建为参数。您不必将引用存储在变量中,它可以立即传递。我认为你的老师是对的。最好给她带一个苹果。

于 2013-04-17T17:26:55.300 回答