问答详情
源自:4-4 Java条件语句之嵌套 if

if(sex.equals("女")),这一句是为什么呀,equals是干嘛的呀?

if(sex.equals("女")),这一句是为什么呀,equals是干嘛的呀?

提问者:未完記憶 2015-11-17 19:30

个回答

  • HansonQ
    2015-11-17 19:57:09
    已采纳

    判断是否相等,当判断基本数据类型的时候和==一样,当判断引用类型的值的时候,==和Equals都是比较栈内存中的地址是否相等。

     1、string是一个特殊的引用类型。对于两个字符串的比较,不管是 == 和 Equals 这两者比较的都是字符串是否相同;
     2、当你创建两个string对象时,内存中的地址是不相同的,你可以赋相同的值。
      所以字符串的内容相同。引用地址不一定相同,(相同内容的对象地址不一定相同),但反过来却是肯定的;
     3、基本数据类型比较(string 除外) == 和 Equals 两者都是比较值;

  • passionfoure
    2015-11-18 02:14:42

    看一下 String中重写Object的equals源码

    1. public boolean equals(Object anObject) {

    2.     if (this == anObject) {

    3.         return true;

    4.     }

    5.     if (anObject instanceof String) {

    6.         String anotherString = (String)anObject;

    7.         int n = count;

    8.         if (n == anotherString.count) {

    9.         char v1[] = value;

    10.         char v2[] = anotherString.value;

    11.         int i = offset;

    12.         int j = anotherString.offset;

    13.         while (n-- != 0) {

    14.             if (v1[i++] != v2[j++])

    15.             return false;

    16.         }

    17.         return true;

    18.         }

    19.     }

    20.     return false;

    21.     }

    object类的equals()方法,判断调用该方法的对象与要比较的对象是不是同一个对象(判断地址),而String类中的equals()方法,则判断当前字符串与传递进来的字符串的内容是否一致。

    针对楼上说的第二问,你忽略的常量池技术:


    以下两种创建String对象方式


    String a="1";


    String b="1";


    System.out.println(a==b);结果true,a和b指向常量池中同一个内存空间 


    String a1=new String("2");


    String b1=new String("2");


    System.out.println(a1==b1);结果false,a1和b1分别位于堆中不同的内存空间