黑马程序员技术交流社区

标题: 为啥我打印出来的都是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
请问你的代码能编译通过吗?我改成这样了,给你作为参考:
  1. public class StringTest
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 Scanner sc = new Scanner(System.in);            
  6.                 System.out.println("请输入用户名:");
  7.                 String username = sc.nextLine();
  8.                 System.out.println("请输入密码:");
  9.                 String password = sc.nextLine();
  10.                 if (username.equals("admin")&& password.equals("admin"))
  11.                 {
  12.                                 System.out.println("true");
  13.                 }
  14.                 else
  15.                 {
  16.                                 System.out.println("false");
  17.                 }
  18.         }
  19. }
复制代码
问题剖析: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