为了账号安全,请及时绑定邮箱和手机立即绑定

这种情况下,String类型之间==不是Ttue,而是False?

这种情况下,String类型之间==不是Ttue,而是False?

qq_控心_0 2017-08-24 22:46:18
//求解,那个false是为什么,难道不是比较的值吗?public class Tese { public static void main(String[] args) { boolean a=function_1(); boolean b=function_2(); boolean c=function_3(); boolean d=function_4(); //结果都是true System.out.println(a); System.out.println(b); //反转后结果应该是一样的,然后用==和equals得出两种结果,一个false  一个true System.out.println(c); System.out.println(d); } public static boolean function_1(){ String a="a"; String b="a"; return a==b; } public static boolean function_2(){ String a="a"; String b="a"; return a.equals(b); } public static boolean function_3(){ String s="123321"; StringBuilder sb=new StringBuilder(s); String str=sb.reverse().toString(); return s==str; } public static boolean function_4(){ String s="123321"; StringBuilder sb=new StringBuilder(s); String str=sb.reverse().toString(); return s.equals(str); }}
查看完整描述

1 回答

已采纳
?
天将明96

TA贡献15条经验 获得超13个赞

首先说一下"=="和"equal"的区别

  • 对于基本类型的变量。"=="和"equal"的区别

    "=="对于基本数据类型,判断两个变量的值是否相等。"equal"不能用于基本数据类型。只能用于类变量。对于基本数据类型要用其包装类。

  • 对于对象变量,"=="和"equal"的区别
    因为对象变量的存储的是对象在内存中的路径,即内存地址。所以用"=="比较时,即使对象的值相等,但是他们的内存地址不同,所以"=="的结果为false。故"=="用于比较两个变量的值是否相等,而不是变量引用的对象是否相等。"equal"用于比较两个对象是否相同。

  • "=="比较的是值【变量(栈)内存中存放的对象的(堆)内存地址】 
    "equal"用于比较两个对象的值是否相同【不是比地址】

综上所述:

String s="123321";
StringBuilder sb=new StringBuilder(s);
String str=sb.reverse().toString();

s和str有相同的值,但是它们的地址是不同的,所以s==str为false,s.equals(str)为true。

那你可能会问

String a="a";
String b="a";

这里的a和b为什么地址也一样呢?这是因为常量池的缘故,编译期能确定相同的字符串才会指向常量池中同一个字符串。通常由常量来初始化的字符串在编译期就能确定,所以它们的地址也一样。而function3中的str,在编译期是不能确定它的值,所以地址与s不一样。

至于什么是常量池,你可以在网上看别人的博客,会比我这里一两句话要好理解得多。

如果满足要求,望采纳!<(▰˘◡˘▰)>

查看完整回答
1 反对 回复 2017-08-25
  • 那一年故乡
    那一年故乡
    在Object中equals方法是用来比较地址的,String类由于改写了equals方法所以是比较内容了,equals方法默认情况下是比较地址的(当然只能用于非基本数据类型)
  • 天将明96
    天将明96
    好吧,谢谢啦!
  • qq_控心_0
    qq_控心_0
    感谢你的回答!是不是可以这样理解,引用类型==是比较对象的内存地址,而前面的两个因为赋的值是相同的,所以第二个变量直接指向了第一个的内存地址,所以==也就返回了true,而后面两个内存地址根本就不一样,也就回返回false咯。
点击展开后面2
  • 1 回答
  • 1 关注
  • 1307 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信