判断字符串是否相等,equals 和 == 的问题

wontao 2016-08-22 09:23:52

class test
{
public static void main (String[] args)
{
String sa = "Hello";
String sb = "Hello";
System.out.println(sa==sb ? "equals" : "not equals");
}
}


不是说好的==是判断2个对象内存地址是否相同吗?为什么还是能输出equals?
初学java新手请指教。
...全文
275 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lucers 2016-08-22
  • 打赏
  • 举报
回复
你的代码 String sa = "Hello"; String sb = "Hello"; 引用的是同一个字符串对象,指向的地址值是一样的,sa==sb比较的就是那个地址值,而不是"hello"这2个字符串内容 sa==sb结果为true,自然输出"equals".
  • 打赏
  • 举报
回复
说了我的个人见解吧: ==比较的是两个对象的内存指针是否一致 equals是调用对象的Class的equals的方法来进行比较 但是在这里String又是一个特例,如果是通过a = "helloworld",b = “hellowrld”来定义的时候对象b和a其实是同一个对象,而a = new String("helloworld"),b = new String(“hellowrld”)定义的时候两个对象是不一样的(具体可以debug看一下), 针对a=“hellowrold”这种方式定义一个字符串变量,其实内部过程可以理解为(1.虚拟机从字符串池中取到temp=“hellowrld”对象,2.将a的指针指向temp对象)由此可以见a与b其实都是指向temp的,所以a==b成立
小灯光环 2016-08-22
  • 打赏
  • 举报
回复
因为你这里并没有创建新的对象,这样写就不一样了:
public static void main(String[] args) {
		String sa = new String("Hello");
		String sb = new String("Hello");
		System.out.println(sa == sb ? "equals" : "not equals");
	}//

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧