为什么不可以设置一个字符串,字符串内容是“a”(String ch = "a"),然后调用equals方法,与s.charAt(i)进行比较( ch.equals(s.charAt(i)) )?不也是一样的内容吗?为什么一定是同一个字符,而不能是内容相同呢??求解
s.charAt(i)返回的值是char是一个基本类型,用==比较就可以了,只有当是引用类型的时候用equals会比较好
equals表示两个字符串完全相同,是来自同一对象的引用,地址相同。而==表示仅仅是字符串内容相同,地址不一定一样。
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);
}
这样子也行
字符的比较会不会是比较ASCII码的值呢,因为感觉s.charAt(i)= = 'a'不太可能是同一个内存地址
equal方法是String类型的方法,而char是基本数据类型,不是一个类,是没有equal方法的,多想想类的概率,对象的该类,Java是面向对象的语言,需要慢慢体会,String源码也非常简单,可以自己看看找出定义的equal方法
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);
}
}
equals 是引用类型String的方法,而s.charAt(i)返回的是一个字符,是一个基本数据类型的数据,不是一个对象,所以没有equals方法。(有问题请批评指出啊,3q)
因为.equals 只能比较类型相同的两个对象内容,如果你把char转换成string就可以用了,比如:
if ((s.charAt(i)+"").equals("a"))
equals方法是比较两个字符串是否相等,而这里charAt()方法返回的是一个字符型,两个类型都不相同的变量,如何用equals比较?所以这里用字符型的数据采用==进行比较