>  기사  >  Java  >  Java에서 ==와 같음을 사용하는 것의 차이점은 무엇입니까?

Java에서 ==와 같음을 사용하는 것의 차이점은 무엇입니까?

PHPz
PHPz앞으로
2023-05-15 09:25:112433검색

1. == 구문 분석

==은 동일한 기본 데이터 유형 간의 비교에 자주 사용되며 동일한 유형의 객체 간의 비교에도 사용할 수 있습니다. == 常用于相同的基本数据类型之间的比较,也可用于相同类型的对象之间的比较;

  • 如果 == 比较的是基本数据类型,那么比较的是两个基本数据类型的值是否相等;

  • 如果 == 是比较的两个对象,那么比较的是两个对象的引用,那么就是比较两个对象的引用是否相等,也就是判断两个对象是否指向了同一块内存区域;

2、equals 方法解析

equals 方法主要用于两个对象之间,检测一个对象是否等于另一个对象。

我们来看一看 Object 类中的 equals 方法的源码

public boolean equals(Object obj) {
     return (this == obj);
 }

它的作用也是判断两个对象是否相等,一般有两种使用情况:

情况一:对象的 equals 方法没有被重写,那么 equals 被调用时比较的是两个对象的引用是否相等,也就是两个对象是否指向了同一片内存区域。此时,其等价于 == 比较两个对象。

Dog类

package com.xiao;

/**
 * @author :小肖
 * @date :Created in 2022/3/11 14:42
 */
public class Dog {

    private String name;

    private Integer age;


    public Dog() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Dog(String name, Integer age) {
        this.name = name;
        this.age = age;
    }
}

测试类

import com.xiao.Dog;

public class Test {

    public static void main(String[] args) {
        Dog dog = new Dog("小旺",2);
        Dog dog1 = new Dog("小旺",2);
        System.out.println(dog.equals(dog1));
    }
}

测试结果

false

情况二:对象的 equals 方法被重写了。一般,我们进行重写后的 equals 方法比较的是两个对象的内容是否相等。如果相等的话,那么返回 true ,否则返回 false

if = =는 기본 데이터 유형을 비교한 다음 두 기본 데이터 유형의 값이 동일한지 여부를 비교합니다.

==가 두 개체인 경우; 비교는 두 개체에 대한 참조이며, 두 개체의 참조가 동일한지 비교하는 것입니다. 즉, 두 개체가 동일한 메모리 영역을 가리키는지 확인하는 것입니다.

2. equals 메소드

equals 메소드는 주로 두 객체 사이에서 한 객체가 다른 객체와 같은지 여부를 감지하는 데 사용됩니다.
  • 객체 클래스의 equals 메소드 소스 코드를 살펴보겠습니다.

    package com.xiao;
    
    /**
     * @author :小肖
     * @date :Created in 2022/3/11 14:42
     */
    public class Dog {
    
        private String name;
    
        private Integer age;
    
    
        public Dog() {
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        public Dog(String name, Integer age) {
            this.name = name;
            this.age = age;
        }
    
    
        @Override
        public boolean equals(Object obj) {
            if(obj.getClass() != getClass()){
                return false;
            }
            Dog dog = (Dog) obj;
            if(dog.getAge() == age && dog.getName().equals(name)){
                return true;
            }
            return false;
        }
    }

    이 함수는 두 객체가 동일한지 여부를 결정하는 것이기도 합니다. 일반적으로 두 가지 사용 상황이 있습니다:
  • 사례. 1: 객체 equals 메서드가 재정의되지 않았으므로 equals가 호출되면 두 객체의 참조가 동일한지, 즉 두 객체가 동일한지 비교합니다. 동일한 메모리 영역을 가리킵니다. 이 시점에서는 두 개체를 비교하는 ==와 같습니다.

    Dog 클래스
  • rrreee
  • 테스트 클래스

    rrreee

    테스트 결과
  • false

  • 사례 2: 개체의 equals 메서드가 재정의되었습니다. 일반적으로 재정의된 equals 메서드는 두 객체의 내용이 동일한지 비교합니다. 동일하면 true가 반환되고, 그렇지 않으면 false가 반환됩니다.

    Dog 클래스
  • rrreee
테스트 결과🎜🎜테스트 클래스 코드는 위와 동일합니다🎜🎜🎜true🎜🎜🎜3.equals 메소드는 다음과 같은 특징을 가집니다🎜🎜🎜🎜재귀성: 그렇지 않은 모든 참조 값 x에 대해 null인 경우 x.equals(x)는 true여야 합니다. 🎜🎜🎜🎜대칭: null이 아닌 참조 값 x 및 y의 경우 x.equals(y)가 true인 경우에만 y.equals(x)도 true입니다. 🎜🎜🎜🎜전이성: null이 아닌 참조 값 x, y 및 z에 대해 x.equals(y)가 true이고 y.equals(z)가 true이면 x.equals(z)가 true여야 합니다. . 🎜🎜🎜🎜일관성: null이 아닌 참조 값 x 및 y의 경우 같음 비교에 사용된 개체 정보가 수정되지 않은 경우 x.equals(y)는 여러 번 호출될 때 일관되게 또는 일관되게 true를 반환합니다. 거짓을 반환합니다. 🎜🎜🎜🎜null이 아닌 참조 값 x의 경우 x.equals(null)은 false 를 반환합니다. 🎜🎜🎜

위 내용은 Java에서 ==와 같음을 사용하는 것의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제