2009-12-22 2 views

답변

9

자바 인수가 값으로 전달되고, 객체 인수가 객체에 대한 참조를 전달합니다. 즉, 인수의 참조를 변경할 수 있지만 참조를 전달한 객체는 변경되지 않습니다. 두 가지 가능성이 있습니다. 새 객체를 반환하거나 (선호) 새 참조 (컬렉션, 배열 등)를받을 수있는 컨테이너에 참조를 전달합니다.) 예를 들어 :

private static String changeStringAndReturn(String s) { 
    return new String("new string"); 
} 
private static void changeStringInArray(String[] s) { 
    if (null != s && 0 < s.length) { 
     s[0] = new String("new string"); 
    } 
} 
+5

, 인수는 값에 의해 전달됩니다! – Tarquila

+2

재미있는 점은 코드가 정확하지만 "문서"가 오도 된 것입니다. 같은 코드가 코드에서 발생하는지 궁금합니다. – OscarRyz

+0

@ rsp - 허용 된 답변이기 때문에 문서를 수정할 수 있습니까 – TStamper

5

Java 참조는 으로 전달되므로 함수 내에서 참조를 수정하더라도 변경 내용은 호출 함수로 반영되지 않습니다. 함수 내부에서 수정 한 내용은 원본의 사본이기 때문입니다 원래 참조 자체를 참조하지 마십시오.

그러나 함수 내부에서 참조를 수정하는 대신 changeString 메서드에서 새 문자열을 반환 할 수 있습니다. 당신이

private static void changeString(String[] s) { 
    s[0] = new String("new string"); 
} 

문자열은 불변하는 기능을하고, Java는 최고 수준의 데이터 타입으로 '포인터에-A 참조'의 개념이없는 경우에만

4

. 위의 내용이 마음에 들지 않으면 단일 String 필드가 포함 된 작은 클래스를 만들 수 있습니다.

0

자바에서는 모든 것이 자바 값으로 전달되므로 불가능합니다. 이 인수가 객체 참조 인 경우에는 참조 자체가 아니라 메소드에 전달되는 참조 값입니다.

2

: 자바 객체 참조는 전달할 수 없습니다.

당신이 정말로, 당신은 래퍼 like this을 만들고 당신이 예상하는 방법을 사용할 수 있습니다해야하는 경우

:

private static void changeString(_<String> str) { 
    str.s("new string"); 
} 

public static void main(String[] args) { 
    _<String> s = new _<String>("old string"); 
    changeString(s); 
    System.out.println(s); // prints "new string" 
} 
0

자바하지 않습니다 allow out parameters C 번호와 같은,이 같은 달성 할 수 없기 때문.

2

물론 변경하지 않고 changeString 메서드에서 새 문자열을 반환 할 수 있습니다.

또는 문자열을 포함하거나 포함하는 개체를 만들어 전달할 수 있습니다. ChangeString 메서드는 개체의 내부 문자열을 변경하며 main 메서드는 해당 개체에 대한 참조를 계속 보유합니다 .

그렇지 않으면이 작업을 수행 할 수 없습니다. String는 불변이며, java는 항상 객체를 특정 객체에 대한 포인터 인 값으로 전달합니다. 당신이 가리키고있는 곳을 바꾸고, 당신은 더 이상 같은 물체를 참조하지 않습니다.

1

문자열은 Java에서는 변경할 수 없으며 매개 변수는 값으로 전달되므로 변경할 수 없습니다 (C#에서는 ref과 동일하지 않음). StringBuilder을 전달하고 내용을 쉽게 변경할 수 있습니다.

0

그것의 추악한하지만 글로벌 정적으로 문자열을 바꿀 수는 :

자바에서
private static String s; 

    private static void changeString(String t) { 
     if(s.equals(t)) 
      s = new String("new string"); 
    } 

    public static void main(String[] args) { 
     s = new String("old string"); 
     changeString(s); 
     System.out.println(s); // expect "new string" 
    } 
관련 문제