2013-04-11 62 views
1

对不起,如果问题很愚蠢,我是编程Java的初学者... 我需要知道是否通过使用类的方法改变类的值,直到它到达那里并更改值( 1)与返回该类并更改main(2)上的值相同?就像如果在(2)它创建某种指针...Java:返回一个类User,就像改变它一样?

public class User{ 
     //methods and constructor... 
     String name = ""; 
     public String getName(){return name;} 
     public void setName(String name){this.name = name;} 
    } 

    public class UserList{ 
     //... 
     User [] list = new User(); 
     //some User's inside list... 
     public void setName(String name){ 
      list[0].setName(name); 
     } 
     public User getUser(){ 
      return list[0]; 
     } 
    } 

public class Main{ 
    public static void main(String[] args){ 
     UserList ul = new UserList(); 
     //is this (1): 
     ul.setName("randomname"); 
     // the same as this (2): 
     ul.getUser().setName("randomname"); 

    } 
} 

如果在(2)它实际上返回用户或创建一个“指针”到用户的记忆我不明白。感谢您的耐心等待!

回答

1

是的,它们是等效的。这两个函数调用指向内存中的同一个列表。

由于访问list[0]并将其设置为期望的名称,因此将list的索引0设置为所需的名称。

另一个获取列表,然后采用索引0并将其设置为所需的名称。整体效果是一样的。

请记住,对象是对内存中某个位置的引用。你的数组持有对象引用。当您返回此数组对象的索引时,您将返回引用对象的内存中的位置。结果,该对象被改变。但是,当您拨打list[0]时,您正在访问索引0,在内存中为您提供相同的对象。因此,净效应是相同的。

+0

谢谢!自从我开始学习Java以来​​,我一直在思考这个问题。我从以前的C和intel大会学习开始,Java似乎很抽象......但现在我明白了。非常感谢你! – SadSeven 2013-04-11 20:32:00

+0

没问题!很高兴我能帮上忙。 – Zyerah 2013-04-11 20:32:55

0

完全一样! 您总是通过直接设置其实例变量名称或通过返回对象并修改实例变量来引用相同的对象列表[0]。

相关问题