//求解,那个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不一样。
至于什么是常量池,你可以在网上看别人的博客,会比我这里一两句话要好理解得多。
如果满足要求,望采纳!<(▰˘◡˘▰)>
添加回答
举报
0/150
提交
取消