黑马程序员技术交流社区
标题:
为啥我打印出来的都是false?
[打印本页]
作者:
刘辉
时间:
2013-3-14 21:13
标题:
为啥我打印出来的都是false?
本帖最后由 樱木花道10 于 2013-3-15 22:18 编辑
public class StringTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名:");
String username = sc.nextLine();
System.out.println("请输入密码:");
String password = sc.nextLine();
if (username==admin&& password==admin) {
System.out.println("true");
} else {
System.out.println("false");
}
}
}
作者:
沉默de羔羊
时间:
2013-3-14 21:20
admin你都没有定义,编译能通过么?
并且比较字符串的内容是否相等的方法A.equals(B),A不能为基本数据类型!也不能为Null!
"=="比较的对象的地址!在这里比较不合适!
作者:
Benwolf0818
时间:
2013-3-14 21:21
把if(username==admin&&password==admin)改为if(username==username&&password==password)
作者:
沈子豪
时间:
2013-3-14 21:35
package test1_1;
import java.util.Scanner;
public class Test2 {
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名:");
String username = sc.nextLine();
System.out.println("请输入密码:");
String password = sc.nextLine();
if (username.equals("admin") && password.equals("admin")) {
System.out.println("true");}
else
{
System.out.println("false");
}
}
两个错误,首先你的admin是字符串,定义时候要加"",这样根本就编译不过去.第二个问题是==比较的是地址值,而你要想比较方法的内容是否相等用的是equals
作者:
HM李超
时间:
2013-3-14 22:54
请问你的代码能编译通过吗?我改成这样了,给你作为参考:
public class StringTest
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名:");
String username = sc.nextLine();
System.out.println("请输入密码:");
String password = sc.nextLine();
if (username.equals("admin")&& password.equals("admin"))
{
System.out.println("true");
}
else
{
System.out.println("false");
}
}
}
复制代码
问题剖析:1,你所比较的admin在上文没有定义,所以并不是变量,而应该是一个字符串常量,字符串常量要用""引起来;
2,==做字符串判断时,比较的字符串引用是否相同,很明显,username和password并不指向“admin”这个对象,依然返回false;正确的写法应该是利用String的equals方法判断,String的equals方法重写了Object类的equals方法,它比较的是两个字符串变量的字符序列是否相同;如上,你想判断时username和password指向的字符串常量跟“admin”是否字符序列相同,所以得用equals方法进行判断。
作者:
HM张超
时间:
2013-3-15 11:07
把if(username==admin&&password==admin)
改为if(username==username&&password==password)
或者改为 if (username.equals("admin")&& password.equals("admin"))
作者:
张文星
时间:
2013-3-15 12:55
额,admin这个都没定义怎么编译通过啊,可以先在前面申明 String admin = "admin",后面用,username.equals(admin) && password.equals(admin) 进行比较,不过切记,字符串的比较不能用 ==
作者:
Alex shaw
时间:
2013-3-15 17:03
首先你得明白哪一行代码出的问题 if (username==admin&& password==admin)
该行代码
第一字符串的比较应该用equals,因为String重写了equals方法
第二你的admin没有加引号
第三通常在开发过程中,会将要比较的字符串放在前面,放在后面容易出现空指针异常
像这样 if ("admin".equals(username)&& "admin".equals(password))
作者:
黑马17期-闫东东
时间:
2013-3-15 22:05
name,age是String类型的,调用String特有的比较方法equals 进行比较,
String的equals方法
public boolean equals(Object anObject)将此字符串与指定的对象比较。当且仅当该参数不为 null,并且是与此对象表示相同字符序列的 String 对象时,结果才为 true。
覆盖:
类 Object 中的 equals
参数:
anObject - 与此 String 进行比较的对象。
返回:
如果给定对象表示的 String 与此 String 相等,则返回 true;否则返回 false。
public class StringDemo{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名:");
String username = sc.nextLine();
System.out.println("请输入密码:");
String password = sc.nextLine();
if (username.equals("admin")&& password.equals("admin")) {
System.out.println("true");
} else {
System.out.println("false");
}
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2