2013-07-10 2 views
2
package javaapplication1; 

public class PassString { 

    public static void main(String[] args) { 

     String name = "Shakespeare"; 

     System.out.println("In main, the name is " 
       + name); 

     changeName(name); // i don't get why we pass name as an argument 

     System.out.println("Back in main, the name is " 
       + name); 
    } 

    public static void changeName(String str) { 
     str = "Dickens"; 

     System.out.println("In changeName, the name " + "is now " 
       + str); 
    } 
} 

Я не понимаю цели передачи имени в качестве аргумента в методе changeName. Связано ли это с именем String = «Шекспир»;Не понимаю метод вызова с переданным аргументом

+2

Я думаю, что он пытается продемонстрировать использование аргументов Java pass by value. То есть любое изменение параметра 'str' не отражается в методе, вызывающем его. – MadProgrammer

+0

Да. Можно подумать, что 'name' становится' 'Dickens'' после выполнения' changeName() '. Но этого не происходит в Java. – acdcjunior

ответ

5

Точка примера (я считаю) должна показать, что Java использует семантику pass-by-value.

Значение переменной name в main передается (по значению) к changeName. Это получает значение как начальное значение параметра str.

Значение str затем изменяется на ссылку на строку «Диккенс», и это изменение подтверждается диагностикой в ​​конце метода.

Однако, когда мы вернемся к методу main, следующая диагностическая строка показывает, что значение name не изменилось. Если Java использовала истинную передачу по ссылке, изменение str также изменило бы name - но это не так, потому что Java использует pass-by-value.

+0

Отлично. Делает большой смысл. Большое спасибо. –

2

Дело в том, что даже если вы измените значение str в changeName к «Диккенс», в main() переменная name не влияет.

-2

Я не понимаю цели передачи имени в качестве аргумента в методе changeName.

Похоже, вы пытаетесь изменить значение переменной name.

вы должны сделать это следующим образом:

// in main 
name = changeName(name); 

// see the change in signature 
public static String changeName(String str) 
{ 
    String newName = "William " + str; 
    return newName; 
} 

Почему значение name не изменилось?

Java передается по значению.

т. Е. Когда вы проходите name в changeName методе, две ссылки (name и str), указывающие на один и тот же объект. позже str указывает на какой-то другой объект. но name все еще указывает на более ранний объект.

+0

Не похоже на это ... – Makoto

+0

-1: Это не цель примера. –

+0

, поскольку более ранние ответы добавили рассуждения, я попытался показать, как это можно изменить. – Azodious

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