Java ""및 "=="유사성
먼저“평등”과“==”에 대해 간단히 이야기합시다.
== 작동은 두 변수의 값이 기본 데이터 유형에 대해 동일인지 비교합니다.
참조 변수의 경우 힙에 저장된 주소가 동일한지 여부를 의미합니다.
스택의 내용이 동일합니까?
Equals 작업으로 표시되는 두 변수가 동일한 객체에 대한 참조인지 여부
즉, 힙의 내용이 동일한지 여부입니다.
요약하면, ==는 2 개의 객체의 주소를 비교하고, Equals는 2 개의 객체의 내용을 비교합니다.
문자열 클래스를 간단히 소개하겠습니다
문자열 클래스를 불변 문자 순서라고도합니다
String은 개인 최종 Char Value []를 사용하여 문자열의 저장을 실현합니다. 즉, 문자열 객체가 만들어진 후이 객체에 저장된 문자열 내용을 수정할 수 없습니다. 문자열 클래스에는 특별한 생성 메소드가 있으며, 이는 ""이중 인용문을 사용하여 생성하는 것입니다. 예를 들어, 새 문자열 ( "123")은 실제로 2 개의 문자열 객체를 생성하고, 하나는 "123"~ ""이중 인용문으로 생성되고, 다른 하나는 새로 생성됩니다. 그러나 그들이 만든 기간은 다르고, 하나는 편집 기간이고, 다른 하나는 실행 기간입니다. Java는 문자열 유형의 + 연산자에 과부하를 걸고 +를 직접 사용하여 두 줄을 연결할 수 있습니다. 런타임 동안 문자열 클래스의 인턴 () 메소드를 호출하면 문자열 풀에 개체를 동적으로 추가 할 수 있습니다.
문자열 객체를 만드는 두 가지 방법을 구별하십시오 ""및 new ()
문자열은 특수 포장 데이터입니다. 사용할 수 있습니다 :
문자열 str1 = 새 문자열 ( "123"); 문자열 str2 = "123";
두 가지 형식을 만듭니다
첫 번째는 새 객체를 만들기 위해 새 개체를 만드는 것입니다. 새 개체는 힙에 저장됩니다. 새 객체가 호출 될 때마다 생성됩니다. (실제로 위에서 언급했듯이 실제로 두 가지이지만, 상수 수영장에 "123"이 존재 한 후에는 새로운 "123"이 더 이상 상수 풀에서 만들어지지 않을 것입니다).
두 번째 유형은 먼저 스택에서 문자열 클래스의 객체에 변수 str을 생성 한 다음 상징적 참조를 사용하여 문자열 상수 풀에 "ABC"가 있는지 확인하는 것입니다. 그렇지 않은 경우 "ABC"를 문자열 상수 풀에 보관하고 Str가 "ABC"를 가리 키게하십시오. 이미 "ABC"가 있다면 Str가 직접 "ABC"를 가리 키게하십시오.
우리는 지금주의를 기울여야합니다
한편으로, 첫 번째 글쓰기 방법은 유익하고 메모리 공간을 절약합니다. 동시에 JVM은 스택에서 데이터의 실제 상황을 기반으로 새 개체를 생성 해야하는지 자동으로 결정하기 때문에 프로그램의 실행 속도를 어느 정도 향상시킬 수 있습니다. 문자열의 코드 str = new String ( "123"); 반면, String str = "123"과 같은 형식을 사용하여 클래스를 정의 할 때, 우리는 항상 String 클래스의 객체 str을 생성 할 때 당연한 것으로 여겨집니다.
객체가 만들어지지 않았을 수도 있습니다! 그리고 아마도 이전에 만들어진 객체를 가리킬 수도 있습니다. 새로운 () 메소드를 통해서만 새 개체가 매번 생성되도록 할 수 있습니다.
다음 예제를 참조하십시오
패키지 테스트 스트링; public class teststring {public static void main (String [] args) {문자열 a = "123"; 문자열 b = "123"; System.out.println (a == b); System.out.println (a.equals (b)); System.out.println("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- And 힙에있는 두 개의 참조 객체는 동일합니다. System.out.println("---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- But c is d 힙과 동일하므로 c.equals (d)는 true */ string e = "a1"; 문자열 f = "a"+1; System.out.println (e == f); System.out.println (e.equals (f)); System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 예, Java 자체는 C ++와 달리 오퍼레이터 과부하를 사용합니다 "H"; String "G" + HH; System.out.println("---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
읽어 주셔서 감사합니다. 도움이되기를 바랍니다. 이 사이트를 지원 해주셔서 감사합니다!