猿问

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

//求解,那个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);

}

}


qq_控心_0
浏览 1308回答 1
1回答

天将明96

首先说一下"=="和"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不一样。至于什么是常量池,你可以在网上看别人的博客,会比我这里一两句话要好理解得多。如果满足要求,望采纳!<(▰˘◡˘▰)>
随时随地看视频慕课网APP

相关分类

Java
我要回答