String类型判断

1.Stringstr1="123";if("123".equals(str1))和if(str1=="123")的区别..2.Stringstr1="";if(null... 1.String str1 = "123";
if("123".equals(str1))和if(str1=="123")的区别..

2.String str1 ="";
if(null==str1 || "".equals(str1) || "null".equals(str1) )和if("".equals(str1))的区别..

望大家能给予通俗点的解答,便于理解..谢谢!!!
我只想说..我不是菜鸟....这行我已经进入了2年了.. 只是这问题. 我无法用语言去表达... 望大家帮助....谢谢....
3楼..你可以测试下...
第一个问题.. 2个判断都是返回的true.. 我想了解..为什么大家都会使用前者?的确是地址不同. 一个保存在堆中.. 一个在栈中... 但是我想了解要选择第一种判断..
第二个问题...疑点在于str1可能等于null或者"null"吗? 而我声明的是"",,那我只需要判断"".equals(str1)就可以了啊....

继续等待大家的答案.. 谢谢
展开
 我来答
百度网友3b46a7f
推荐于2018-04-12 · TA获得超过2520个赞
知道小有建树答主
回答量:735
采纳率:0%
帮助的人:0
展开全部
首先楼主肯定知道"=="和equals的区别,我这里再说下:
==比的是两个对象的地址。
equals是java.lang.Object类的一个方法,默认跟"=="一样也是比的地址。如果判断对象相等有其他的标准(例如只要值相等就代表相等),那么就需要重写java.lang.Object的equals方法。String类就重写了此方法,只要对象值相等即可。

Java运行时会维护一个String Pool(String池),String Pool与JAVA堆栈是各自独立的。

String池用来存放运行时中产生的各种字符串,并且池中的字符串的内容不重复。
String对象的创建遵循以下几个原则。
原则1:只要使用new关键字来创建对象(String str = new String("123")),则一定会(在堆区或栈区)创建一个新的对象。 我们知道,只要一个对象是New出来的,那JVM肯定会在内存中为此对象分配一个唯一的地址,因此New出的对象跟任意一个对象用“==”判断肯定为false。
原则2:使用直接指定来创建String对象(如String str="123"),则仅仅会检查维护String池中的字符串,池中没有就在池中创建一个,有则罢了!但绝不会在堆栈区再去创建该String对象。
原则3:使用包含变量的表达式来创建对象String(String str = "123"+"456"),则不仅会检查维护String池,而且还会在堆栈区创建一个String对象。

说完这些,我们来看下你的问题:
1、String str1 = "123";
if("123".equals(str1))和if(str1=="123")的区别..
例子中str1对象是按照原则2创建的,所以地址会相同。
如果String str1 = new String("123"),那么str1按照原则1创建,equals判断为true,==判断为false.

2.String str1 ="";
if(null==str1 || "".equals(str1) || "null".equals(str1) )和if("".equals(str1))的区别 .....而我声明的是"",,那我只需要判断"".equals(str1)就可以了啊....

此问题你提的有点问题, if(null==str1 || "".equals(str1) || "null".equals(str1) )我觉得这条语句可能用来判断数据库查询的结果是否为空,它认为null或空字符串或字符串"null"都代表空,而if("".equals(str1))只有在str1=""的时候才成立。
百度网友dd74216
2010-01-14 · TA获得超过653个赞
知道小有建树答主
回答量:226
采纳率:100%
帮助的人:236万
展开全部
1.String str1 = "123";
if("123".equals(str1))和if(str1=="123")的区别..

首先,String是一个类,123只是这个类中的一个值
equals用来比较两个String类中的值是否相同,= "123"是快捷的建了一个新类,和new String("123")一样(这样说比较通俗)
所以,if("123".equals(str1))就是通过(在比较值),str1 == "123"就不能通过了。因为"123"又是一个新类了。

2.String str1 ="";
if(null==str1 || "".equals(str1) || "null".equals(str1) )和if("".equals(str1))
null == str1不通过。因为str1是空值的一个类, "".equals(str1)通过, "null".equals(str1)不通过。因为"null"值不等于"", 因为是||(或)判断,所以这名是通过的。
if("".equals(str1))是通过的。因为你前面建str1类的时候,初始值是""空。

应该看得懂吧?兄弟加油

参考资料: my head

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jansept
2010-01-14
知道答主
回答量:47
采纳率:0%
帮助的人:10.4万
展开全部
例1例2 输出都是true;

我想了解..为什么大家都会使用前者?
我想大概equals 比较的是对象的内容,而且在自己的新类中可以覆盖equals()方法.用起来方便。

第二个问题...疑点在于str1可能等于null或者"null"吗?

String str1 =""; 你已经申明str1 是一个字符串,虽然什么都不显示.
一旦申明了,那么str1 就不可能是 null ,更不等于"null"这个新字符串!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hardneedl
2010-01-14 · TA获得超过921个赞
知道小有建树答主
回答量:1353
采纳率:57%
帮助的人:605万
展开全部
学编程不是靠做几个习题就可掌握,要实际编写和调试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友c8edb4d67
2010-01-14
知道答主
回答量:53
采纳率:0%
帮助的人:20.6万
展开全部
第一个问题 (1)是123等于str1,(2)吧123赋值给str1.
第二个问题 哥们我也看不懂,哈哈。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式