public class While2{
public static void main(String[] args){
String answer;//回答结果
Scanner input = new Scanner(System.in);
System.out.println("表演的怎么样?(y/n)");
answer = input.next();//获取用户输入
while(! answer.equals("y")){//输入的不是y则继续执行
System.out.println("早上5点开始练声!");
System.out.println("上午练习钢琴!");
System.out.println("下午到声乐老师家练习唱歌!!");
System.out.println("晚上练习舞蹈基本功!");
System.out.println("表演的怎么样(y/n)!");
answer = input.next();
}
System.out.println("圆满完成");
}
}
为什么我吧while循环条件改成while(answer!="y")这样无论我输入y或者x他都是吧循环体的东西打出来
但是我觉得那句话和这话意思一样while(! answer.equals("y"))
他们之间的区别是什么?
刚学几天的新人碰到的问题 请谅解!
10 个解决方案
#1
哈哈 我看书看到后面了才知道 String 是需要用这种方法来判断 。但是为什么会这样呢?
#2
因为在java里面String是对象,不是基本字符数据类型,所以不能用“=”来判断
只能用equals
只能用equals
#3
==号永远是比较对象在内存中的地址是否相同
对于equals方法,在Object里是这样定义的
可以看的出来,还是比较对象在内存中的地址
但是对于String,它重写了父类Object的equals方法(具体可自己看下String的源码)
重写后就是比较字符串的内容了
所以出现answer和"y"的地址永远不一样
所以无论你输出什么他都是true
对于equals方法,在Object里是这样定义的
public boolean equals(Object obj) {
return (this == obj);
}
可以看的出来,还是比较对象在内存中的地址
但是对于String,它重写了父类Object的equals方法(具体可自己看下String的源码)
重写后就是比较字符串的内容了
所以出现answer和"y"的地址永远不一样
所以无论你输出什么他都是true
#4
String 的 == 比较的是两个String类型的地址的比较,而 equals比较的则是两个String内容的,以下是String类equals方法的底层实现
可以看出就是将字符串转成char[] 然后挨个比较
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
可以看出就是将字符串转成char[] 然后挨个比较
#5
#6
因为String是对象 对象都得这样的 啊
#7
String是个类 不是基础数据类型 类对象虚拟机会分配给哈希地址 ==号比较的是哈希地址 equals比较的才是值
#8
#9
java中String类型的比较不能直接用“=”,必须要用equals或者compareTo来进行比较.
String 的 == 比较的是两个String类型的地址的比较,而 equals比较的则是两个String内容的,以下是String类equals方法的底层实现
String 的 == 比较的是两个String类型的地址的比较,而 equals比较的则是两个String内容的,以下是String类equals方法的底层实现
#10
青鸟学友,握握手,哈
#1
哈哈 我看书看到后面了才知道 String 是需要用这种方法来判断 。但是为什么会这样呢?
#2
因为在java里面String是对象,不是基本字符数据类型,所以不能用“=”来判断
只能用equals
只能用equals
#3
==号永远是比较对象在内存中的地址是否相同
对于equals方法,在Object里是这样定义的
可以看的出来,还是比较对象在内存中的地址
但是对于String,它重写了父类Object的equals方法(具体可自己看下String的源码)
重写后就是比较字符串的内容了
所以出现answer和"y"的地址永远不一样
所以无论你输出什么他都是true
对于equals方法,在Object里是这样定义的
public boolean equals(Object obj) {
return (this == obj);
}
可以看的出来,还是比较对象在内存中的地址
但是对于String,它重写了父类Object的equals方法(具体可自己看下String的源码)
重写后就是比较字符串的内容了
所以出现answer和"y"的地址永远不一样
所以无论你输出什么他都是true
#4
String 的 == 比较的是两个String类型的地址的比较,而 equals比较的则是两个String内容的,以下是String类equals方法的底层实现
可以看出就是将字符串转成char[] 然后挨个比较
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
可以看出就是将字符串转成char[] 然后挨个比较
#5
#6
因为String是对象 对象都得这样的 啊
#7
String是个类 不是基础数据类型 类对象虚拟机会分配给哈希地址 ==号比较的是哈希地址 equals比较的才是值
#8
#9
java中String类型的比较不能直接用“=”,必须要用equals或者compareTo来进行比较.
String 的 == 比较的是两个String类型的地址的比较,而 equals比较的则是两个String内容的,以下是String类equals方法的底层实现
String 的 == 比较的是两个String类型的地址的比较,而 equals比较的则是两个String内容的,以下是String类equals方法的底层实现
#10
青鸟学友,握握手,哈