>  기사  >  Java  >  `CaseInsensitiveString` 객체를 생성할 때 `String` 객체가 아닌 `new`를 사용해야 하는 이유는 무엇입니까?

`CaseInsensitiveString` 객체를 생성할 때 `String` 객체가 아닌 `new`를 사용해야 하는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-13 08:23:02719검색

Why is it necessary to use `new` when creating a `CaseInsensitiveString` object but not a `String` object?

Java에서 문자열 생성: "String s = new String("silly")의 경우"

Java에서 문자열을 생성할 때, String 클래스의 동작을 이해하는 것이 중요합니다. Java의 다른 많은 클래스와 달리 String 리터럴은 new 키워드 없이 자동으로 String 객체를 생성합니다. 그러나 new 연산자를 사용하여 새 String 객체를 생성하는 것은 불필요한 메모리 소비로 이어질 수 있으므로 명시적으로 권장되지 않습니다.

이를 설명하려면 다음 코드를 고려하세요.

String s = "No longer silly";

여기서 이 경우에는 "No more 어리석은" 리터럴이 s 변수에 직접 할당되어 단일 String 객체가 생성됩니다. 그러나 다음 코드 조각:

String s = new String("silly");

은 불필요한 추가 String 객체를 생성합니다. 이를 방지하려면 첫 번째 예에서 볼 수 있듯이 가능할 때마다 리터럴 할당을 사용하는 것이 좋습니다.

그러나 String 개체를 동적으로 생성해야 하는 상황이 있을 수 있습니다. 예를 들어, 다음 클래스를 고려해보세요.

public final class CaseInsensitiveString {
    private String s;
    
    public CaseInsensitiveString(String s) {
        if (s == null) {
            throw new NullPointerException();
        }
        this.s = s;
    }
}

이 시나리오에서:

  1. 첫 번째 문이 괜찮은 이유는 무엇인가요? CaseInsensitiveString cis = "Polish";?
    첫 번째 문인 CaseInsensitiveString cis = new CaseInsensitiveString("Polish");이 정확합니다. 일반적으로 String 객체에 리터럴 할당을 사용하는 것이 권장되지만 이 규칙은 CaseInsensitiveString과 같은 다른 클래스의 객체에는 적용되지 않습니다. 이 경우 CaseInsensitiveString 클래스의 새 인스턴스를 생성하려면 new 키워드가 필요합니다.
  2. 위 명령문이 괜찮도록 CaseInsensitiveString이 String처럼 동작하도록 하려면 어떻게 해야 합니까(String 확장 유무에 관계없이)? 그런 리터럴을 전달할 수 있게 만드는 문자열의 특징은 무엇입니까? 제가 이해한 바에 따르면 Java에는 "복사 생성자" 개념이 없습니다.
    Java의 String 클래스는 다른 클래스에 비해 고유한 동작을 가지고 있습니다. 특히 리터럴은 암시적으로 String 객체로 변환되므로 명시적인 구성이 필요하지 않습니다. 이는 String s = "Polish"; new 연산자를 호출하지 않고. Java에는 이에 상응하는 "복사 생성자" 개념이 없습니다. 대신 String 클래스는 리터럴 문자열과 같은 문자 시퀀스를 허용하여 새 String 객체를 생성하는 불변성과 미리 정의된 생성자를 제공합니다.

위 내용은 `CaseInsensitiveString` 객체를 생성할 때 `String` 객체가 아닌 `new`를 사용해야 하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.