찾다

 >  Q&A  >  본문

Java在比较字符串的时候,equals 与== 完全一样呀?

完全一样,比较字符串equals与== 完全没有区别吗?

阿神阿神2889일 전472

모든 응답(9)나는 대답할 것이다

  • PHP中文网

    PHP中文网2017-04-17 17:38:04

    으아아아

    결과:

    으아아아

    == 객체를 가리키는 변수가 일치하는지 비교합니다. s와 s2가 동일한 이유는 jvm이 최적화하고 두 변수가 하나의 객체를 가리키기 때문입니다.
    equal은 객체에 저장된 문자열이 동일한지 비교합니다.

    회신하다
    0
  • 怪我咯

    怪我咯2017-04-17 17:38:04

    어떤 질문에는 실제로 소스 코드에 가장 좋은 답변이 있습니다

    으아아아

    회신하다
    0
  • 怪我咯

    怪我咯2017-04-17 17:38:04

    == 연산자는 두 참조가 동일한 객체를 가리키는지 여부를 테스트합니다. 서로 다른 두 객체가 동일한지 테스트하려면 equals() 메서드를 사용해야 합니다.

    더 자세히 알고 싶으시면 제가 쓴 글을 읽어보세요. Java 빠른 읽기 쓰기 가이드

    회신하다
    0
  • 迷茫

    迷茫2017-04-17 17:38:04

    귀하의 질문은 매우 문제가 있다고 생각합니다. 귀하가 게시한 코드의 텍스트에 설명된 결론을 어떻게 얻었습니까?
    당신의 의도를 대략적으로 짐작해 보고 마지못해 대답해 보도록 하겠습니다.
    자바에서는 == 메소드와 같음 메소드가 다르기 때문에 간략하게 설명하면 다음과 같습니다.

    1. ==

      ==는 두 참조가 동일한 객체를 가리키는지 확인하는 데 사용됩니다(예:
      Object a = new Object();
      Object b = a;
      a == b // = => ; 사실입니다

    2. 같음

      동등 메소드는 두 객체가 동일한지 여부를 확인하는 데 사용됩니다. 이 메서드는 최상위 클래스 Object에 정의되어 있습니다. Object에서 이 메서드를 구현하면 ==를 사용하여 참조가 같은지 비교합니다. 하위 클래스가 동등 메소드를 사용하려는 경우 Object의 동등 메소드를 대체하고 자체 동등 논리를 제공하는 것이 가장 좋습니다. Person 클래스를 다음과 같이 정의합니다.

    으아아아

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-04-17 17:38:04

    ss2은 모두 상수 "12"에 대한 직접 참조입니다. 컴파일러는 코드를 최적화하고 두 변수에 의해 참조되는 "12" 문자열 개체만 생성하므로 s == s2입니다. 하지만 다른 "12"가 new String("12") 또는 "1234".substring(0, 2) 등 다른 방식으로 생성된 경우 ==이 작동하지 않고 equals에서 내용을 비교합니다. equals의 원본 코드를 보면 참조된 ==을 비교하기 위해 먼저

    을 사용한다는 것을 알 수 있습니다. 으아아아

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-04-17 17:38:04

    신작이 나오면 달라지겠죠

    회신하다
    0
  • 迷茫

    迷茫2017-04-17 17:38:04

    우선, equals와 ==의 기능을 고려해야 합니다.
    ==는 두 객체의 참조를 비교하는 것과 동일하며, equals 메소드는 Object 클래스에 정의되어 있으며 String으로 다시 작성되었습니다. 클래스 소스 코드를 볼 수 있습니다. 위의 분석에서 ==를 먼저 사용하여 참조를 비교한 다음 내용을 비교했습니다.
    두 문자열을 비교할 때 주로 내용을 비교하고 싶기 때문에 같음 메서드를 사용합니다. ==를 사용하면 IDE가 실제로 경고를 표시합니다.

    그럼 == 및 equals 메소드가 동일한 효과를 갖는 이유는 무엇입니까? "="를 사용하여 문자열 객체를 생성하는 것과 new를 사용하여 문자열을 생성하는 것의 차이점에 따라 달라집니다.
    스트링 풀을 이해하신 적이 있는지 모르겠습니다. 제 이해가 깊지 않으니 필요하시면 직접 확인해 보셔도 됩니다.
    처음으로 "="를 사용하여 문자열 개체를 생성하면 문자열 풀에 "12"가 있는지 확인합니다. 그렇지 않으면 풀에 하나를 추가하고 s에 대한 참조를 반환합니다. , 풀에 하나가 있는 것으로 확인되면 이 참조는 s2에 직접 할당되므로 s와 s2의 참조가 동일하므로 == 비교가 true가 됩니다.
    new를 사용하여 문자열을 만들고 효과를 확인할 수 있습니다.

    으아악

    new 키워드를 사용하여 문자열 개체를 생성하면 매번 새 개체가 생성되고 참조가 변수에 할당됩니다.

    회신하다
    0
  • 天蓬老师

    天蓬老师2017-04-17 17:38:04

    모두 잘 말씀하셨습니다. 문자열 상수 풀을 검색해 보시는 것이 좋습니다. 그러면 깊은 이해가 가능할 것입니다.

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-04-17 17:38:04

    s1과 s2의 내용은 동일합니다.
    할당 방법은 다음과 같습니다.
    먼저 s1은 "..." 문자열을 JVM 가상 머신의 상수 풀에 넣습니다. 🎜>s2를 두 번째로 할당할 때 먼저 상수 풀에 이 문자열이 포함되어 있는지 확인하고, 그렇다면 이를 가리킵니다.
    따라서 ==를 사용해도 동일합니다.
    s2에서 새 문자열(123)을 사용하면 참조 주소가 다르며 동일하지 않습니다.
    휴대전화 코드는 쉽지 않습니다.

    회신하다
    0
  • 취소회신하다