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

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

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

正在回答

2 回答

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

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

1 回复 有任何疑惑可以回复我~
#1

未完記憶 提问者

非常感谢!
2015-11-18 回复 有任何疑惑可以回复我~

看一下 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分别位于堆中不同的内存空间


1 回复 有任何疑惑可以回复我~
#1

未完記憶 提问者

初学,,有点看不懂,但是还是谢谢你
2015-11-18 回复 有任何疑惑可以回复我~
#2

passionfoure 回复 未完記憶 提问者

楼上“2”说的有问题,上面的代码你自己试试
2015-11-18 回复 有任何疑惑可以回复我~
#3

未完記憶 提问者 回复 passionfoure

我现在刚还没入门,你说的太深奥了,有点看不懂
2015-12-02 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信