这最后一行是否传递了一个对象?或对象的引用?

时间:2013-04-17 17:18:39

标签: java

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

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

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