快捷导航

这种情况下,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);
        }
}

免责声明:本内容仅代表回答者见解不代表本站观点,请谨慎对待。

版权声明:作者保留权利,不代表本站立场。

回复

使用道具 举报

参与会员1

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

  • 对于基本类型的变量。"=="和"equal"的区别
    "=="对于基本数据类型,判断两个变量的值是否相等。"equal"不能用于基本数据类型。只能用于类变量。对于基本数据类型要用其包装类。
  • 对于对象变量,"=="和"equal"的区别
    因为对象变量的存储的是对象在内存中的路径,即内存地址。所以用"=="比较时,即使对象的值相等,但是他们的内存地址不同,所以"=="的结果为false。故"=="用于比较两个变量的值是否相等,而不是变量引用的对象是否相等。"equal"用于比较两个对象是否相同。
  • "=="比较的是值【变量(栈)内存中存放的对象的(堆)内存地址】
    "equal"用于比较两个对象的值是否相同【不是比地址】
综上所述:
Strings="123321";StringBuildersb=newStringBuilder(s);Stringstr=sb.reverse().toString();s和str有相同的值,但是它们的地址是不同的,所以s==str为false,s.equals(str)为true。
那你可能会问
Stringa="a";Stringb="a";这里的a和b为什么地址也一样呢?这是因为常量池的缘故,编译期能确定相同的字符串才会指向常量池中同一个字符串。通常由常量来初始化的字符串在编译期就能确定,所以它们的地址也一样。而function3中的str,在编译期是不能确定它的值,所以地址与s不一样。
至于什么是常量池,你可以在网上看别人的博客,会比我这里一两句话要好理解得多。
如果满足要求,望采纳!
回复

使用道具 举报

可能感兴趣的问答

发新帖
  • 微信访问
  • 手机APP