programing

" " 를 사용하여 문자열을 초기화하려면 어떻게 해야 합니까?

javaba 2022. 8. 8. 19:15
반응형

" " 를 사용하여 문자열을 초기화하려면 어떻게 해야 합니까?

String이 다른 클래스와 동일한 경우 큰따옴표를 사용하여 초기화하려면 어떻게 해야 합니까?

Java 문자열은 특별합니다.

자바 디자이너들은 언어의 성능을 향상시키기 위해 모든 것을 개체로 만드는 대신 객체 지향 언어의 원시 유형을 유지하기로 결정했다.원시 요소는 콜 스택에 저장되므로 필요한 스토리지 공간이 적고 조작 비용이 저렴합니다.한편 오브젝트는 프로그램 힙에 저장되므로 메모리 관리가 복잡하고 저장 공간이 더 필요합니다.

성능상의 이유로 Java의 String은 프리미티브와 클래스 사이에 있도록 설계되었습니다.

예를들면

String s1 = "Hello";              // String literal
String s2 = "Hello";              // String literal
String s3 = s1;                   // same reference
String s4 = new String("Hello");  // String object
String s5 = new String("Hello");  // String object

여기에 이미지 설명 입력

주의: 문자열 리터럴은 공통 풀에 저장됩니다.이렇게 하면 저장 공간을 절약하기 위해 동일한 내용을 가진 문자열에 대한 저장 공간을 쉽게 공유할 수 있습니다. Stringnew는 산산 operator에 저장됩니다.에 됩니다.heap동일한 콘텐츠에 대한 스토리지 공유는 없습니다.

Java는 String을 특수 클래스로 취급하므로 두 가지 방법으로 모두 초기화할 수 있습니다.

  1. 리터럴 직접 할당

    String a = "adsasdf";
    
  2. 새로운 키워드를 사용한 다른 오브젝트로서

    String a = new String("adsasdf");
    

.== 표시:

String a = "asdf";
String b = "asdf";
System.out.println(a == b);  // True
System.out.println(a.equals(b)); // True

String a = new String("asdf");
String b = new String("asdf");
System.out.println(a == b);  // False
System.out.println(a.equals(b)); // True

첫 , 와 b는 'a'와 'b'로 불리는 입니다.literal pool그리고 둘 다 같은 대상을 참조하고 있기 때문에 양쪽에서 동등합니다.

경우, 이 두 비등하지 않습니다.==연산자가 동일한 값인 경우.

문자열은 JLS에서 특별한 취급을 받습니다.이 문자열은 리터럴이 존재하는2개의 비프라이머리 타입 중 하나입니다(다른 하나는 입니다).

JLS에서:

문자열 리터럴은 클래스 'String [...]의 인스턴스에 대한 참조입니다.

* 음, '문자의 문자'와 '문자의 문자'함께 있는 '문자의 문자'는 '문자의 문자 그대로입니다.null그러나 대부분의 사람들은 "유형"을 적절한 유형으로 생각하지 않는다.

자바 언어의 특징입니다.소스 코드의 문자열 리터럴은 특별 취급됩니다.

여기서 말하는 언어 사양은 문자열 리터럴은 다음과 같습니다.String

안에 는 문자 .String물건.

String myString = "Some text";

위의 코드는String오브젝트(큰따옴표 사용)

문자열은 프로그래밍 언어에서 매우 자주 사용됩니다.java는 객체 지향이므로 문자열은 객체입니다.번거로운 새로운 String("someString")을 피하기 위해 string 객체가 필요할 때마다 string 객체 java를 사용하여 string 객체를 작성할 수 있습니다.

하지만 당신은 현의 평등함을 명심해야 합니다.여기 내가 의미하는 것을 증명하기 위한 간단한 JUnit 테스트가 있다.

    @Test
    public void stringTest() {
       // a string literal and a string object created 
       // with the same literal are equal
       assertEquals("string", new String("string"));

       // two string literals are the same string object
       assertSame("string", "string"); 

       // a string literal is not the same object instance 
       // as a string object created with the same string literal
       assertFalse("string" == new String("string"));

       // java's String.intern() method gives you the same
       // string object reference for all strings that are equal.
       assertSame("string", new String("string").intern());
    }

언급하자면.문자열 리터럴은 클래스 String의 인스턴스를 참조하는 것으로, 다음과 같이 코드를 쓸 수 있습니다.

"abc".getBytes();
"a:b:c.".carn:");
""".codePointAt(0);

- 문자열은 Java의 클래스입니다.당신이 옳습니다.그래서 우리는 언제든지 이 명령어를 사용하여 초기화할 수 있습니다.new키워드를 지정합니다.

- 하지만 다음과 같은 작업을 수행할 때:

String s = "";

위의 스테이트먼트는 컴파일러에 의해 특별한 String 객체로 마크되어 클래스 로드 중에 JVM(초기화 전에 로드 완료)에 의해 문자열 리터럴이라고 불리는 것이 표시되며 문자열 리터럴 풀에 저장됩니다.

- 따라서 String은 다음과 같이 생성할 수 있습니다.new()또,""method는 스트링 리터럴풀로부터의 참조가 있기 때문에 스트링 오브젝트에 대한 참조가 없는 경우에도 히프에 머무르는 스트링 리터럴을 제공합니다.

자바는 우리를 위해 2단계 프로세스를 수행합니다.

String str = "hello";

와 동등하다

char data[] = {'h', 'e', 'l' , 'l', 'o'};
String str = new String(data);

예를 들어 [.NET][1]도 비슷한 것을 가지고 있습니다.

String(Char[]) constructor

한다

String(char[] value)

참조 추가:-

Java.lang.String단순한 클래스가 아닙니다.그것은 핵심 언어의 필수적인 부분입니다.그 컴파일러는 통사설탕을 가지고 있다.예를들면,""의 줄임말과 같다new String(""). 작성 시""컴파일러는 공간을 절약하기 위해 동일한 문자열을 동일한 인스턴스에 최적화합니다. "a" + 5 == "a5" ==> true

컴파일러는 오브젝트 버전과 네이티브 유형 사이에서 박스/언박스를 할 필요가 없는 것 등 많은 것에 대해 통사적인 설탕을 가지고 있습니다.부모는 오브젝트, 디폴트 컨스트럭터 등을 의미합니다.

언급URL : https://stackoverflow.com/questions/17489250/how-can-a-string-be-initialized-using

반응형