2015-03-24 3 views
0

Я устал от следующего кода Java, и результат был «null». Я думал, что два n - это тот же указатель, указывающий на разную память (в основной функции и в тестовой функции). Если я инициирую n как null в основной функции, назначьте его в тестовой функции и захотите использовать его вне тестовой функции (без возврата n). Как мне это сделать?Область переменных Java, назначение переменных и декларация в разных функциях

public class ttt { 
    static class LinkNode { 
     int val; 

     public LinkNode(int p) { 
      val = p; 
     } 

    } 

    public static void test(Set<LinkNode> n) { 
     n = new HashSet<>(); 
     LinkNode a = new LinkNode(1); 
     n.add(a); 
    } 

    public static void main(String[] args) { 
     Set<LinkNode> n = null; 
     test(n); 
     System.out.println(n); 
    } 

} 
+0

возможно дубликат [Является Java «перейти по ссылке» или «передача по значению»?] (Http://stackoverflow.com/ вопросы/40480/is-java-pass-by-reference-or-pass-by-value) – Vitruvius

+0

да, дублируется. здесь это значение пропускной способности/справки. –

+0

Я заметил, что первая строка в тестовой функции вызывает проблему, но что, если я не знаю, является ли n нулевым или нет, и я хочу проверить его внутри тестовой функции. если он равен нулю, я хочу запустить его внутри тестовой функции. что я могу сделать? – user3483236

ответ

0

Когда вы сделали

n = new HashSet<>(); 

вы перезаписали значение n переходила в test(...) но не сбрасывает значение n в main(...)

Это означает, что вы добавили a к новый LinkNode вы создали в пределах test(...), но с n в main(...) ссылается на старыеLinkNode назначение и добавление потеряны для сборщика мусора после выхода из test(...)

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