在编程生涯中,经验会比较两个值或对象是否相等,那么是使用了equals还是==呢,你是否清楚二者的区别呢?
二者的区别:
"==" 操作比较的是两个变量的值是否相等,即两个对象在内存中的首地址。
"equals" 操作表示的两个变量是否是对一个对象的引用,即比较字符串中所包含的内容是否相同。
例子:
String a = "1234";
String b = "1234"
String c = new String("1234");
String d = new String("1234");
①a==b 结果:true
②a==c 结果:flase
③a.equals(c) 结果:true
④c==d 结果:flase
⑤c.equals(d) 结果:true
原因:
创建 a = "1234" 程序会在String缓冲池中存入值,
创建 b = "1234" 程序首先会在这个String缓冲池中寻找相同值的对象
JVM会在常量池中先查找有没有一个值为"1234"的对象,
如果有,就会把它赋给当前引用.即原来那个引用和现在这个引用指点向了同一对象,
如果没有,则在常量池中新创建一个"1234",下一次如果有String b = "1234";又会将b指向"1234"这个对象
使用了 new 操作符,他告诉程序:“要创建一个新的,不要旧的!”于是就又创建了一个新的"1234"String对象。