java equals和==的区别
概述
-
==比较的类型:
- 引用类型: 比较的是地址值是否相同
- 基本类型: 比较的是基本类型的值是否相同 equals比较的类型:
- 只能用于比较引用类型,默认比较的是地址值是否相同,而String类中重写了equals()方法,比较的是内容是否相同。
代码举例
String s1 = new String("hello");
String s2 = "hello";
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));
//输出结果: false true
这个例子应该很简单。
图解
再来一个栗子尝尝
String s1 = "hello";
String s2 = "world";
String s3 = "helloworld";
System.out.println(s3 == s1 + s2);
System.out.println(s3.equals((s1 + s2)));
System.out.println(s3 == "hello" + "world");
System.out.println(s3.equals("hello" + "world"));
//输出结果: false true true true
是不是有点意外呢?
我们知道字符串的特点是: 一旦被赋值,就不能改变。
字符串如果是变量相加,先开空间,再进行拼接
字符串如果是 常量相加,是先进行拼接,然后在字符串常量池中找,如果有就返回,如果没有就重新创建。