!s.equals.("")与s!=null的区别?

cztx5479 2010-03-16 10:55:58
我写了一个小程序,想从键盘输入字符并打印出来,String s;
用while(s!=null)时无论输入空格后回车还是不输入任何东西而直接回车程序都不会结束;
而用while(!s.equls("")时,输入空格后回车程序不会结束,但不输入而直接回车时程序就会结束.

1.请帮我详细分析一下这个现象的原因。
2.请结合我的程序分析一下(1)null与"",
(2)为什么很多例子中都用!s.equals("")而不用s!=null;在这种情况下用!s=null行不行呢?
...全文
1070 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
appleqwfyhw 2010-03-17
  • 打赏
  • 举报
回复
先说判断的时候为什么 obj!=null 会放在前面 obj.equls("")会放在后面 ,obj!=null 是判断这个对象存在否,而obj.equls("")是obj这个对象已经存在,去判断它的值是否为空 ,如果先判断obj.equls(""),后判断obj!=null ,在obj为null的时候 obj.equls("")就会报空指针 .明白了吧楼主
applerockhool 2010-03-17
  • 打赏
  • 举报
回复
小朋友,多看看书再来论坛吧
sky123123 2010-03-17
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 lliiqiang 的回复:]

""是个对象,对象的内容是空,但是有对象.而null没有指向任何对象

就像你没有银行卡即没有银行账号是null,而你有银行卡有账号只是里面暂时没有钱那么就是"".

当你没有账号为null的时候别人无法通过银行给你钱,而如果你有账号即使暂时为""别人也可以通过你的账号付钱给你
[/Quote]

精彩,学习咯 …… O(∩_∩)O~
cangbai217 2010-03-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zoutuo 的回复:]

引用 4 楼 spkly 的回复:

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

通常是两个写一起判断的 (null != s)&&(!"".equals(s))
"".equals(s)写可以避免s为空的时候,空指针异常。


是这个意思
[/Quote] 对滴
dfa34fg 2010-03-17
  • 打赏
  • 举报
回复
fireelf000 2010-03-17
  • 打赏
  • 举报
回复
equals比较的是值,==比较的是内存地址
syab1108 2010-03-17
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 appleqwfyhw 的回复:]
先说判断的时候为什么 obj!=null 会放在前面 obj.equls("")会放在后面 ,obj!=null 是判断这个对象存在否,而obj.equls("")是obj这个对象已经存在,去判断它的值是否为空 ,如果先判断obj.equls(""),后判断obj!=null ,在obj为null的时候 obj.equls("")就会报空指针 .明白了吧楼主
[/Quote]
+1
longq121 2010-03-17
  • 打赏
  • 举报
回复
对象与空的问题,当你不知道 某个引用有没有对象时,最好先==null再equls("")
zyus1987 2010-03-16
  • 打赏
  • 举报
回复

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 == " "));

看看这个也许对你有帮助
zhaojian19910220 2010-03-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 spkly 的回复:]
null是空,没有任何东西
""是空字符,是一个对象

通常是两个写一起判断的 (null != s)&&(!"".equals(s))
"".equals(s)写可以避免s为空的时候,空指针异常。
[/Quote]..
苍蝇①号 2010-03-16
  • 打赏
  • 举报
回复
1、用while(s!=null)时无论输入空格后回车还是不输入任何东西而直接回车程序都不会结束;
2、而用while(!s.equls("") 时,输入空格后回车程序不会结束,但不输入而直接回车时程序就会结束.
只要终端正常返回了,s里面就有东西,所以第一个问题很显然
输入了空格后返回的是" ",而不输入时为"",这是有区别的,因此2问题也很显然
zyus1987 2010-03-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cztx5479 的回复:]
*******************
*******************
请问我从键盘上(1)输入空格后回车,
(2)不输入而直接回车,
上边的两种情况是对象还是字符串呢,它们在堆栈中是如何分配的呢


*************************
************************
回答这个问题我多加分
[/Quote]
回答(1)(2)两种情况s的内容分别是“ ”(包含空格的字符串)、“”(不包含任何字符的空字符串)。
这两种情况s都有值,并且都是string类型。
奔跑哥 2010-03-16
  • 打赏
  • 举报
回复
string的 equal方法是用来比较字符串的值的,而判断是否为 null,是判断这个对象是否有效,即是否指向某一块地址。
zyus1987 2010-03-16
  • 打赏
  • 举报
回复
我觉得你现在疑惑的是“”和null的区别!
“”:表示的是空字符,对象是存在的
null:表示空对象,对象不存在
py330316117 2010-03-16
  • 打赏
  • 举报
回复
是否创建字符串对象的问题,str==null表示字符串对象为null,创建个一个null对象;equals则是比较2个字符创的value是否相等
hannover100 2010-03-16
  • 打赏
  • 举报
回复
null是空,没有任何东西
""是空字符,是一个对象

通常是两个写一起判断的 (null != s)&&(!"".equals(s))
"".equals(s)写可以避免s为空的时候,空指针异常。
clchun4352 2010-03-16
  • 打赏
  • 举报
回复
null是空,没有任何东西,没有指向任何对象。
""是空字符,是一个对象,是指向为空字符串的对象。

通常是两个写一起判断的 (null != s)&&(!"".equals(s))
"".equals(s)写可以避免s为空的时候,空指针异常。
zoutuo 2010-03-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 spkly 的回复:]

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

通常是两个写一起判断的 (null != s)&&(!"".equals(s))
"".equals(s)写可以避免s为空的时候,空指针异常。
[/Quote]

是这个意思
spkly 2010-03-16
  • 打赏
  • 举报
回复
对象、数组放在堆中,原始类型(int,char...)局部变量放在栈中。
空格 和 字符串 都属于String对象,那肯定是放在堆中的。

spkly 2010-03-16
  • 打赏
  • 举报
回复
null是空,没有任何东西
""是空字符,是一个对象

通常是两个写一起判断的 (null != s)&&(!"".equals(s))
"".equals(s)写可以避免s为空的时候,空指针异常。
加载更多回复(12)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧