A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

hujch

初级黑马

  • 黑马币:22

  • 帖子:8

  • 精华:0

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;
                       
                }
                }               
        }
}

4 个回复

倒序浏览
将name==li改成name.equal(”li”)
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
楼上正解,String类型用==是地址判断
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
北海北 发表于 2017-3-13 22:13
将name==li改成name.equal(”li”)

谢谢,
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
本帖最后由 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"的地址值就不一样了;
这也是为什么你的程序用==会一直报错的原因了



回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马