黑马程序员技术交流社区
标题:
为什么输入name为li,code为12,输入正确,还进入不了系统
[打印本页]
作者:
hujch
时间:
2017-3-13 19:56
标题:
为什么输入name为li,code为12,输入正确,还进入不了系统
import java.util.Scanner;
public class hello{
public static void main(String [] args){
Scanner input =new Scanner(System.in);
String name; int code;int i=1;int j=2-i;
for(i=1;i<=3;i++){System.out.println("请输入用户名:"); name=input.next();
System.out.println("请输入密码:");code=input.nextInt();
if(name=="li"&&code==12){System.out.println("欢迎进入系统!");break;
}else { System.out.println("输入错误,您还有"+(3-i)+"次机会\n");if(i==3){ System.out.println("对不起,您3次均输入错误");}continue;
}
}
}
}
作者:
北海北
时间:
2017-3-13 22:13
将name==li改成name.equal(”li”)
作者:
lvshen9
时间:
2017-3-14 08:51
楼上正解,String类型用==是地址判断
作者:
hujch
时间:
2017-3-14 09:02
北海北 发表于 2017-3-13 22:13
将name==li改成name.equal(”li”)
谢谢,
作者:
xulinml
时间:
2017-3-14 09:06
本帖最后由 xulinml 于 2017-3-14 09:21 编辑
对于String这样的引用数据类型来说
== 比较的是地址值,equals() 比较的是引用数据类型的 值
因此你这个应该用equals;
但是有时候我们比较程序中自己定义的一些字符串的时候,equals和== 号却有相同的结果,比如下面这个:
String name1 = "123";
String name2 = "123";
比较name1==name2和 name.equals(name2)都返回true,
这是因为,程序先将"123"的地址值赋给了name1,
第二次赋值的时候由于java对于String常量的优化,不会新建一个已有的"123",而是将已有的"123"的地址值赋给name2;
因此这时候name1 和 name2 无论是地址是还是值都是相等的
对于程序中Scanner从键盘中获取得到的字符串地址值和你自己设置的那个"lin"的地址值就不一样了;
这也是为什么你的程序用==会一直报错的原因了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2