java中equals()和双等号==的区别

x.equals(y) 比较的是x与y的内容是否相等。

x==y  比较的是x与y的地址是否相等。

但是在Object类中equals返回的是==的判断,所以在Object类中equals和==没有区别,而所有的类都是继承自java.lang.Object类。只有在个别类,如String、Integer等对equals方法进行了重写使其进行地址的比较。但是在没有对equals进行重写的类中就只能从Object类中继承equals的方法。

而String x="123";  与  String x=new String("123") ;  还有区别。

String y="123";在创建对象时会先查找是否有值为"123"的对象,如果有就让y指向它的地址。(在这里y指向了x的地址)所以这时x==y虽然比较的是地址但是返回的仍是true。

String y=new String("123") ;在创建对象时直接创建一个新的对象。所以这时x==y返回的是false。

public static void main(String[] args) {
		String x="123";
		String y="123";
		System.out.println(x==y);
		System.out.println(x.equals(y));
	}

运行结果:true                                                                                                                                                                                                    true

public static void main(String[] args) {
		String x=new String("123");
		String y=new String("123");
		System.out.println(x==y);
		System.out.println(x.equals(y));
	}

运行结果:false                                                                                                                                                                                                    true

你可能感兴趣的:(java中equals()和双等号==的区别)