我写了一个小程序,想从键盘输入字符并打印出来,String s;
用while(s!=null)时无论输入空格后回车还是不输入任何东西而直接回车程序都不会结束;
而用while(!s.equls("")时,输入空格后回车程序不会结束,但不输入而直接回车时程序就会结束.1.请帮我详细分析一下这个现象的原因。
2.请结合我的程序分析一下(1)null与"",
(2)为什么很多例子中都用!s.equals("")而不用s!=null;在这种情况下用!s=null行不行呢?
    

解决方案 »

  1.   

    字符串的比较都有equals,对象的比较用==
      

  2.   

    null是空,没有任何东西
    ""是空字符,是一个对象
      

  3.   

    null是空,没有任何东西
    ""是空字符,是一个对象通常是两个写一起判断的 (null != s)&&(!"".equals(s))
     "".equals(s)写可以避免s为空的时候,空指针异常。
      

  4.   

    对象、数组放在堆中,原始类型(int,char...)局部变量放在栈中。
    空格 和 字符串 都属于String对象,那肯定是放在堆中的。
      

  5.   

    null是空,没有任何东西,没有指向任何对象。
    ""是空字符,是一个对象,是指向为空字符串的对象。通常是两个写一起判断的 (null != s)&&(!"".equals(s))
    "".equals(s)写可以避免s为空的时候,空指针异常。
      

  6.   

    null是空,没有任何东西
    ""是空字符,是一个对象通常是两个写一起判断的 (null != s)&&(!"".equals(s))
    "".equals(s)写可以避免s为空的时候,空指针异常。
      

  7.   

    是否创建字符串对象的问题,str==null表示字符串对象为null,创建个一个null对象;equals则是比较2个字符创的value是否相等
      

  8.   

    我觉得你现在疑惑的是“”和null的区别!
    “”:表示的是空字符,对象是存在的
    null:表示空对象,对象不存在
      

  9.   

    string的 equal方法是用来比较字符串的值的,而判断是否为 null,是判断这个对象是否有效,即是否指向某一块地址。
      

  10.   

    回答(1)(2)两种情况s的内容分别是“ ”(包含空格的字符串)、“”(不包含任何字符的空字符串)。
    这两种情况s都有值,并且都是string类型。
      

  11.   

    1、用while(s!=null)时无论输入空格后回车还是不输入任何东西而直接回车程序都不会结束;
    2、而用while(!s.equls("") 时,输入空格后回车程序不会结束,但不输入而直接回车时程序就会结束.
    只要终端正常返回了,s里面就有东西,所以第一个问题很显然
    输入了空格后返回的是" ",而不输入时为"",这是有区别的,因此2问题也很显然
      

  12.   


                    String str = null;
    String str_1 = "";
    String str_2 = " ";

    System.out.println("str==null?:"+(str == null));
    System.out.println("str==\"\"?:"+(str == ""));
    System.out.println("str==\" \"?"+(str == " "));
    System.out.println("\n");

    System.out.println("str_1==null?:"+(str_1 == null));
    System.out.println("str_1==\"\"?:"+(str_1 == ""));
    System.out.println("str_1==\" \"?:"+(str_1 == " "));
    System.out.println("\n");

    System.out.println("str_2==null?:"+(str_2 == null));
    System.out.println("str_2==\"\"?:"+(str_2 == ""));
    System.out.println("str_2==\" \"?:"+(str_2 == " "));看看这个也许对你有帮助
      

  13.   

    equals是值比较,==是引用比较
      

  14.   

    字符串用.equals  number型的用==null
      

  15.   

    在java中字符串也是对象
    null是没有地址
    ""是有地址但是里面的内容是空的
    " "有地址里面的内容不是空的只是里面的内容是空串
    就比如说你输入多个空格加上回车s的value:[ ,  ,  ,  ,  ,  ]
    只是输入回车s的value:[]这个就是区别  你自己debug看一下
      

  16.   

    string s="" 它会在堆中分配空间,而string s=null不会在堆中分配空间
      

  17.   

    ""是个对象,对象的内容是空,但是有对象.而null没有指向任何对象就像你没有银行卡即没有银行账号是null,而你有银行卡有账号只是里面暂时没有钱那么就是"".当你没有账号为null的时候别人无法通过银行给你钱,而如果你有账号即使暂时为""别人也可以通过你的账号付钱给你
      

  18.   

    回车对于电脑程序来说是一次操作,在你的程序中接受到键盘回车这个操作时已经会产生了一个对象,s指向此对象,因此s不为null,回车在文本中表示换行,换行这个字符没有长度,是个空字符"",即此时s是一个对象,但是对象没有任何内容。要区分空格,空格其实就是一个字符,在文本中表示了一格
      

  19.   

    string s="" 它会在堆中分配空间,而string s=null不会在堆中分配空间
      

  20.   

    先说判断的时候为什么 obj!=null 会放在前面 obj.equls("")会放在后面 ,obj!=null 是判断这个对象存在否,而obj.equls("")是obj这个对象已经存在,去判断它的值是否为空 ,如果先判断obj.equls(""),后判断obj!=null  ,在obj为null的时候 obj.equls("")就会报空指针 .明白了吧楼主
      

  21.   

    对象与空的问题,当你不知道 某个引用有没有对象时,最好先==null再equls("")
      

  22.   

    equals比较的是值,==比较的是内存地址
      

  23.   

    equals方法疑难