2013-02-18 4 views
-2

Передача по ссылке дает мне немного головную боль, поэтому я хотел бы посмотреть, как смущает остальная часть сообщества, найдет этот вопрос. Пожалуйста, не стесняйтесь сказать, считаете ли вы, что это глупый вопрос.Какой выход?

Что вы можете сказать о выходе следующей программы?

class Demo { 
    public static void main(String[] args) { 
     ArrayList<Container> list = new ArrayList<Container>(); 
     Container c1 = new Container(); 
     Container c2 = new Container(); 
     c1.setSt("c1"); 
     c2.setSt("c2"); 
     list.add(c1); 
     list.add(c2); 

     Container c3 = new Container(); 
     c3.setSt("c3"); 
     modify(list, c3); 

     for (Container st : list) { 
      System.out.println(st.getSt()); 
     } 
     System.out.println("c3.st: " + c3.getSt()); 
    } 

    private static void modify(ArrayList<Container> list, Container container) { 
     list.get(1).setSt("modified"); 
     container.setSt("modified c3"); 
     container = new Container(); 
     container.setSt("new container"); 
    } 
} 

class Container { 
    private String st; 

    public String getSt() { 
     return st; 
    } 

    public void setSt(String st) { 
     this.st = st; 
    } 
} 
+1

Придумайте свой ответ и спросите, почему он отличается от вашего понимания. Текущий вопрос не по теме. – mtk

+0

Предполагается, что StackOverflow должен заменить ваш надежный компилятор Java и JVM? Голосование закрывается. –

+1

К сожалению, это не очень хороший вопрос для SO. Похоже, у вас есть реальный вопрос относительно ссылок; это ваша работа, чтобы правильно сформулировать этот вопрос, а не задавать что-то круговое, как это. – djechlin

ответ

0

Это

c1 
modified 
c3.st: modified c3 

Что я могу выиграть?

+0

Немного о себе. Я нахожу, что немного нарушает ссылочный обмен. –

+0

@ LuisSep Я не понимаю, почему вы считаете это удивительным ... Ожидаете ли вы 'container.setSt (« новый контейнер »);' заменить другой 'container' (другой объект), который передается как параметр? Или вы ожидаете 'container = new Container();' ничего не делать? – user000001

Смежные вопросы