자바 에서 String 유형 중"="과"equal"의 차 이 를 분석 합 니 다.

머리말
1.1 먼저 많은 사람들 이 알다 시 피 String 에서'='을 사용 하 는 것 은 주소 이 고 equals 로 내용 을 비교 하 는 것 이다.많은 사람들 이 이에 대해 기억 법 을 사용 하고 기억 을 통 해 이 인용 을 강화 하지만 그 진정한 원 리 는 어렵 지 않다.우리 가 그 이 유 를 진정 으로 알 았 을 때 사용 하 는 것 도 더욱 유연 하고 저력 이 있다.친구 탓 하지 마)
2 지식 에 대한 준비
  • 유형 상수 탱크
  • 운행 시 상 당량 탱크
  • 문자열 상수 탱크
  • 우리 가 오늘 토론 한 주 제 는 당연히 문자열 상수 탱크 이다.
    왜 여기 서 다른 두 개의 상수 지 를 꺼 내 서 말 해 야 합 니까?먼저 소생 은 인터넷 이나 cnc 에서 많은 사람들 이 문자열 상수 지가 존재 하 는 지,방법 구역 이 쌓 여 있 는 지 논쟁 하 는 것 을 보 았 습 니 다.그래서 저 는 이 안에서 매우 책임감 있 게 독자 들 에 게 알려 드 리 겠 습 니 다.
    1.형식 상수 탱크,방법 영역 에 저장,모든 class 파일 이 하나 있 습 니 다.
    2.실행 시 상 당량 탱크,방법 구역 에 저장,모든 class 공용
    3.문자열 상수 탱크:더미 에 저장
    그리고 문자열 상수 탱크 는 하나의 특징 이 있 습 니 다.저 장 된 상수 가 유일 합 니 다.셋,시작.
    3.1 상황 1
    
    public class Test2 {
    	public static void main(String[] args) {
    		
    		String a ="   ";
    		String b ="   ";
    		
    		System.out.println(a == b);
    		System.out.println(a.equals(b));
    		
    	}
    }
    실행 결과:
    在这里插入图片描述
  • true
  • true
  • 설명:우리 String a="장 경 헌"때 문 입 니 다.쌓 여 있 는 문자열 상수 탱크 에서'장 경 헌'이라는 대상 이 있 는 지 검색 합 니 다.
  • 있 습 니 다.'장 경 헌 이라는 대상 의 주 소 를 a 로 가 리 킵 니 다'
  • 없 음:문자열 상수 탱크 에'장 경 헌'을 새로 만 든 다음 에 주소 참조 대 가 를 a
  • 에 부여 합 니 다.
    String b="장 경 헌";그리고 첫 번 째 성명 String="장 경 헌";마찬가지 로'검색'을 먼저 하고'장 경 헌'이라는 대상 이 이미 존재 하기 때문에 더 이상 대상 을 만 들 지 않 고 존재 하 는'장 경 헌'의 주 소 를 b 에 인용 하여 할당 하기 때문에
    a 와 b 의 주소 가 같 고 내용 도 자 연 스 럽 게 같 기 때문에 두 결 과 는 true 입 니 다.여러분 이 아 시 겠 습 니까?
    3.2 상황 2.
    
    public class Test2 {
    	public static void main(String[] args) {
    		
    		String a ="   ";
    		 
    		String b = new String("   ");
    		
    		System.out.println(a == b);
    		System.out.println(a.equals(b));
    		
    	}
    }
    결국
    在这里插入图片描述
    false,true
    해명 하 다.
    String a="장경 헌";
    이미 설명 되 었 습 니 다.쌓 여 있 는 문자열 상수 탱크 에서 대상 을 만 드 는 것 입 니 다.
    String b=new String("장 경 헌");
    이것 도 블록 안에 대상 을 만 드 는 것 이지 만 문자열 상수 탱크 에 대상 을 만 드 는 것 이 아 닙 니까?
    두 개의 서로 다른 대상 은 주소 가 자 연 스 럽 게 다 르 고 유형 은 모두 장 경 헌 이기 때문에 결 과 는 false,true 이다.
    3.3 상황 3
    
    public class Test2 {
    	public static void main(String[] args) {
    		
    		String a = new String("   ");
    		 
    		String b = new String("   ");
    		
    		System.out.println(a == b);
    		System.out.println(a.equals(b));
    		
    	}
    
    }
    
    결과:false,true
    在这里插入图片描述
    new("장 경 헌")때문에 설명 합 니 다.쌓 인 영역 에 있 는 비 문자열 상수 탱크 에 두 개의 서로 다른 대상 을 만 들 었 음 을 나타 내 며,두 번 new 에 두 개 를 만 들 었 기 때문에 주소 가 다 르 기 때문에 결 과 는 false,true 입 니 다.
    3.4 상황
    
    public class Test2 {
    	public static void main(String[] args) {
    		
    		String a = " "+"  ";
    		String b = "   ";
    		System.out.println(a == b);
    		System.out.println(a.equals(b));
    		
    	}
    }
    결과:true,true
    在这里插入图片描述
    해석:String="장 경"+"헌";
    컴 파일 할 때 이미 계산 을 하기 시작 했다.이것 은 자바 컴 파일 의 최적화 메커니즘 이기 때문에 a 가 가리 키 는 주 소 는 여전히'장 경 헌'이다.그래서 상황 이 앞의 상황 과 일치 하기 때문에 true,true 입 니 다.
    (자바 컴 파일 최적화 체 제 는 상수 만 을 대상 으로 변수 a=a+b 를 대상 으로 하지 않 습 니 다.(이것 은 최적화 체제 가 없 는 것 입 니 다.자바 컴 파일 체제 에 대해 서 는 바 이 두 에 가서 알 아 볼 수 있 습 니 다)
    상황
    
    public class Test2 {
    	public static void main(String[] args) {
    		
    		String a = " ";
    		String b = "  ";
    		String c =a+b;
    		String d = "   ";
    		System.out.println(d == c);
    		System.out.println(d.equals(c));
    		
    	}
    }
    결과:
    在这里插入图片描述
    설명:a 와 b 는 변수 이기 때문에 자바 최적화 메커니즘 이 존재 하지 않 고 두 개의 c=a+b 를 쌓 아 올 리 는 비 문자 상수 풀 에 저장 하기 때문에 두 개의 서로 다른 대상 입 니 다.자 연 스 럽 게 false,true 입 니 다.
    3.6 마지막 상황
    
    public class Test2 {
    	public static void main(String[] args) {
    		
    		String a = " ";
    		String b = "  ";
    		String c =(a+b).intern();
    		String d = "   ";
    		System.out.println(d == c);
    		System.out.println(d.equals(c));
    		
    	}
    
    }
    결과:
    在这里插入图片描述
    설명:intern();방법 은 쌓 인 구역 안의 비 문자 상수 탱크 안의 대상 을 문자 상수 탱크 에 강제로 넣 는 것 입 니 다.문자 상수 탱크 안의 대상 의 유일 성 때문에 문자열 상수 탱크 안에'장 경 헌'과 같은 대상 이 있다 면 그 주 소 를 c 에 인용 합 니 다.없 으 면 하나의(즉,이전 쌓 인 구역 안의 그 대상 과 같은 대상)을 만 드 는 것 과 같 습 니 다.있 으 면 원래 있 던'장 경 헌'대상 을 c 에 게 할당 합 니 다.주소 가 같 기 때문에 true 입 니 다.
    요약:
    ==비교 주소(대상 에 문자열 상수 탱크 가 존재 하고 클래스 가 같다 면==true 로 되 돌아 갑 니 다)
    equal 은 내용 을 비교 합 니 다.
    여러분,잘못된 댓 글 이 있 으 면 제때에 지적 해 주 셔 서 감사합니다.
    자바 의 String 유형 중'='과'equal'의 차 이 를 알 아 보 는 이 글 은 여기까지 소개 되 었 습 니 다.자바 String 유형==equal 과 관련 된 내용 은 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

    좋은 웹페이지 즐겨찾기