How-Do/Java에서 String 객체의 값을 설정할 수 있습니까 (새 String 객체를 만들지 않고)?생성자를 사용하지 않고 Java에서 String 값을 설정할 수 있습니까?
답변
String
에는 "설정"방법이 없습니다. 자바 문자열은 immutable입니다. 변수 String
의 값을 변경하려면 변수에 다른 문자열을 지정해야합니다. 기존 문자열은 변경할 수 없습니다. (새로운 String 객체를 생성하지 않고)
할당은 새로운 객체를 생성하지 않습니다 - 그것은 복사 참조. 참고이 뭔가를 쓰는 경우에도 :
s = "hello";
그것은 새로운 문자열 객체에게이 실행될 때마다 만들어지지 않습니다. 문자열 객체는 문자열 풀에서 가져옵니다.
문자열은 변경되지 않으므로 이미 생성 된 문자열의 값을 변경할 수 없습니다.
사실 자바에서는 그렇게 할 방법이 없기 때문에 String 객체는 기본적으로 변경되지 않습니다.
"+"
연결 연산자를 "str1" + "str2"
과 같이 사용하는 것이 실제로는 세 번째 것을 생성하기 위해 모든 문자열을 복사하기 때문에 실제로 비효율적입니다.
는 필요에 따라 그것은 개체의 당신의 정의에 약간 의존 StringBuilder
사용하는 것이 좋습니다. 참조를 의미한다면, 아니오. 참조는 항상 생성됩니다. 문자가 사용하는 메모리를 의미한다면, 확실히.
문자열이있는이 과제에 있다는 것을 의미 가능한 경우 구금되어
String s1 = "Hello";
String s2 = "Hello";
2 참조 (메모리 위치에 대한 포인터)가 있지만 Hello
은 한 장소에 메모리이다. 이것은 문자열을 수정할 수없는 이유 중 하나입니다.
물론 리플렉션을 통해 내부 문자 배열에 액세스 할 수 있습니다. 그러나 그렇게하는 것은 대개 나쁜 생각입니다. http://www.eclipsezone.com/eclipse/forums/t16714.html에 대한 자세한 정보.
String 객체는 Java에서 변경할 수 없으므로 변경 사항이 있으면 새 String 객체가 만들어집니다. 새 객체를 만들지 않고 객체와 같은 문자열을 변경하려면 StringBuilder를 사용하십시오. 보너스로 StringBuilder는 문자열의 최종 길이에 대해 알고있는 경우 추가 메모리를 미리 할당 할 수 있습니다.
"둘러싸는 유형"- 익명 유형 내에서 문자열을 설정해야하기 때문에이 질문에 마주 쳤습니다. 그러나 내부에 설정하고 외부에서 사용하려는 모든 변수는 최종해야합니다.
간단한 해결책은 입니다. StringBuilder을 사용하십시오.이 문자열은 변경 가능한 String입니다.
- 1. Java에서 라디오 버튼에 값을 설정할 수 있습니까?
- 2. Java에서 enum 시작 값을 설정할 수 있습니까?
- 3. 생성자를 호출하지 않고 Java에서 객체의 인스턴스를 만들 수 있습니까?
- 4. Java에서 기본 생성자를 선언 할 수 있습니까?
- 5. app.config를 사용하지 않고 어셈블리 프로빙 경로를 설정할 수 있습니까?
- 6. asp_regsql을 사용하지 않고 응용 프로그램 서비스를 설정할 수 있습니까?
- 7. 기본 생성자를 사용하지 않고 벡터 초기화
- 8. 어떻게 JDBC를 사용하지 않고 java에서 .sql 파일을 실행할 수 있습니까?
- 9. 주석을 사용하지 않고 GAE/java에서 데이터를 유지할 수 있습니까?
- 10. PHP로 양식 필드 값을 설정할 수 있습니까?
- 11. 프로토콜 핸들러를 사용하지 않고 ClassLoader.getResource (String) 구현
- 12. 강하게 입력하지 않고 DataContext 열 값을 설정할 수 있습니다.
- 13. Java에서 주석의 값을 읽을 수 있습니까?
- 14. 일련의 생성자를 사용하지 않고 세션 데이터를 클래스 라이브러리에 전달 하시겠습니까?
- 15. MySQL에 설정된 값을 0으로 설정할 수 있습니까?
- 16. 자바 주석 값을 필수로 설정할 수 있습니까?
- 17. AccordionItem.IsSelected 값을 설정할 수 없습니다.
- 18. jsp : JSP 태그를 사용하지 않고 Java에서 전달 하시겠습니까?
- 19. 기본 생성자를 사용하지 않고 클래스 정의 내에서 클래스의 객체를 만들 수 있습니까?
- 20. flex에서 공유 객체를 사용하지 않고 쿠키에서 값을 설정하고 쿠키에서 값을 가져올 수 있습니까?
- 21. 생성자를 정의하지 않고 힙에 새로운 구조체를 만들 수 있습니까?
- 22. LinqDataSource.OrderBy를 메서드의 결과로 설정할 수 있습니까?
- 23. std :: string 내부에서 루프를 사용하지 않고 문자열 집합 중 첫 번째 문자열을 찾을 수 있습니까?
- 24. 사용하지 않고 파일 닫기
- 25. Java에서 매개 변수화 된 유형을 사용하지 않고 그 종류를 참조하십시오.
- 26. 이 스텁 객체의 반환 값을 어떻게 설정할 수 있습니까?
- 27. XAML Combobox에서 선택한 값을 어떻게 설정할 수 있습니까?
- 28. StringWriter를 입력으로 사용하지 않고 string 유형의 데이터를 직렬화하는 방법
- 29. 생성자를 호출 할 수 있습니까?
- 30. Java에서 툴팁의 인세 트를 어떻게 설정할 수 있습니까?
항상 ** 나쁜 아이디어입니다. 변경 가능한 문자열이 필요하면'StringBuilder' 인스턴스를 대신 사용하십시오. –