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

为什么不可以调用equals方法

为什么不可以设置一个字符串,字符串内容是“a”(String ch = "a"),然后调用equals方法,与s.charAt(i)进行比较(  ch.equals(s.charAt(i))  )?不也是一样的内容吗?为什么一定是同一个字符,而不能是内容相同呢??求解

正在回答

9 回答

s.charAt(i)返回的值是char是一个基本类型,用==比较就可以了,只有当是引用类型的时候用equals会比较好

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

杨云亭

引用类型是?
2015-01-08 回复 有任何疑惑可以回复我~
#2

慕娘2181525 回复 杨云亭

String类型的就是引用类型,你也可以s.charAt(i)+""这样转化成String类型,然后(s.charAt(i)+"").equals("a")就可以比较了。
2016-08-23 回复 有任何疑惑可以回复我~
#3

不看6324不混吃等死 回复 慕娘2181525

???
2017-01-06 回复 有任何疑惑可以回复我~
#4

城序圆 回复 慕娘2181525

软软问句,为什么加了“”就变成string?
2019-03-11 回复 有任何疑惑可以回复我~
查看1条回复

equals表示两个字符串完全相同,是来自同一对象的引用,地址相同。而==表示仅仅是字符串内容相同,地址不一定一样。

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

月影下

说反了
2017-05-24 回复 有任何疑惑可以回复我~

public static void main(String[] args) {

/* String str="学习 JAVA 编程 ";

System.out.println("获取1位置字符"+str.charAt(1));

byte[]b=str.getBytes();

for(byte a:b){

System.out.print(a+" ");

*/

String s = "aljlkdsflkjsadjfklhasdkjlflkajdflwoiudsafhaasdasd";

    

    // 出现次数

int num = 0;

    

     // 循环遍历每个字符,判断是否是字符 a ,如果是,累加次数

for (int i=0;i<s.length();i++                       )

{String b=s.substring(i,i+1);

        // 获取每个字符,判断是否是字符a

if (b.equals("a") )

//(s.charAt(i) +" ").equals("a"))

{

            // 累加统计次数

num++; 

}

}

System.out.println("字符a出现的次数:" + num);

}

这样子也行


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

tigerAndBull

为什么直接用s[i]不行
2017-05-16 回复 有任何疑惑可以回复我~
#2

慕娘4342957 回复 tigerAndBull

数组才能用s[i]呀,s是字符串
2017-08-12 回复 有任何疑惑可以回复我~
#3

城序圆

想问下,就是if给您注释的那一段,去掉“”怎么就不行了?萌新不太懂,可以回复下吗哈
2019-03-11 回复 有任何疑惑可以回复我~

字符的比较会不会是比较ASCII码的值呢,因为感觉s.charAt(i)= = 'a'不太可能是同一个内存地址

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

慕容6636443

另外equals()在object类里最初是用来比较是否指向同一内存空间,只在个别类里重写/覆盖成比较值是否相等(比如String,Integer,Date等),基本类型可以用= = 判断,应该就没有重写/覆盖equals吧。然后我不太确定(s.charAt(i)).equals(‘a’)有没有给s.charAt(i)或a分配内存空间,但是如果有的话应该返回false吧,因为指向的内存空间不一样
2016-09-01 回复 有任何疑惑可以回复我~

equal方法是String类型的方法,而char是基本数据类型,不是一个类,是没有equal方法的,多想想类的概率,对象的该类,Java是面向对象的语言,需要慢慢体会,String源码也非常简单,可以自己看看找出定义的equal方法

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

public class HelloWorld {

    public static void main(String[] args) {

// 定义一个字符串

String s = "aljlkdsflkjsadjfklhasdkjlflkajdflwoiudsafhaasdasd";


        // 出现次数

int num = 0;

        

         // 循环遍历每个字符,判断是否是字符 a ,如果是,累加次数

for (int i = 0 ; i < s.length(); i++){

            // 获取每个字符,判断是否是字符a

if ((s.charAt(i) + "").equals("a")) {

                // 累加统计次数

num ++; 

}

}

System.out.println("字符a出现的次数:" + num);

}

}


2 回复 有任何疑惑可以回复我~

equals 是引用类型String的方法,而s.charAt(i)返回的是一个字符,是一个基本数据类型的数据,不是一个对象,所以没有equals方法。(有问题请批评指出啊,3q)

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

qq_卡卡罗特_5

对对对,equals()方法需要对象来引用。。。
2017-10-15 回复 有任何疑惑可以回复我~

因为.equals 只能比较类型相同的两个对象内容,如果你把char转换成string就可以用了,比如:

if ((s.charAt(i)+"").equals("a"))

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

长颈鹿在附近

你这样是不行的。char不能转成String
2015-12-06 回复 有任何疑惑可以回复我~
#2

波浪波浪海海 回复 长颈鹿在附近

可以的 你试一试~
2016-02-01 回复 有任何疑惑可以回复我~

equals方法是比较两个字符串是否相等,而这里charAt()方法返回的是一个字符型,两个类型都不相同的变量,如何用equals比较?所以这里用字符型的数据采用==进行比较

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

杨云亭

equals方法比较的是两个字符串的内容是否相同,==比较的是两个字符串的内存地址,比较的都是字符串,那==也可比较字符型,equals不能吗?
2015-01-08 回复 有任何疑惑可以回复我~
#2

武当王也 回复 杨云亭

你应该补补基础,首先你得明白==是用来干嘛的,第二你得了解,java语言中有哪些数据类型,就两种,自己百度,或者看书,char属于基本类型,==对于基本数据类型来说,作用只是比较他们是否一样,例如1==1,'a'=='a',而string是属于引用类型,==运算符就不是比较他们的值,而是比较虚地址,比较值,有专门的equals方法。
2015-09-09 回复 有任何疑惑可以回复我~
#3

君未知 回复 武当王也

讲的透彻!
2018-01-14 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么不可以调用equals方法

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