这个问题看了许多人的回答,但感觉都不是很满意;
基本数据类型做比较的时候,应该使用==;
引用类型做比较的时候两个都可以;
==比较的是内存地址,equals方法在object里源代码也是用==来比较,比较的也是内存地址;
但有特殊的例子,比如在string中,==号比较的是内存地址,但是equals比较的是值,因为string这个类比较特殊,JDK帮我们重写了string的equals方法,所以在string里equals比较的是值。有的时候也需要我们重写equals方法,因为在它是object类的一个方法,我们需要比较对象的时候最好是重写该方法,比如我们自定义的类做HashMap的Key时,我们经常需要重写equals方法,并且用equals方法的返回结果是布尔类型的,可以直接用来做判断,但要注意的是用equals方法来比较对象的时候,第一个对象一定得检查是不是存在了,不然会出现空指针异常;