a*********7 发帖数: 30080 | 1 简直不能相信自己的眼睛。嗯,这些代码是外包公司写的。
1
String perm = something;
if (perm != null || perm != "") {
String[] permArray = perm.split(";");
...
}
2
String ruleArr[] = ruleName.split(",");
if (ruleArr != null && ruleArr.length > 0) {
for (int iCount = 0; iCount < ruleArr.length; iCount++) {
if (null != ruleArr[iCount] || ruleArr[iCount].length() > 0
|| ruleArr[iCount] != "") {
ruleNames.add(ruleArr[iCount]);
}
}
}
3
String l_alphabet;
if(null!=p_filterDTO.getAlphabet()){
l_alphabet=p_filterDTO.getAlphabet();
}else{
l_alphabet=null;
} |
W***o 发帖数: 6519 | 2 大牛,这些代码转成专业写法应该怎么写?
【在 a*********7 的大作中提到】 : 简直不能相信自己的眼睛。嗯,这些代码是外包公司写的。 : 1 : String perm = something; : if (perm != null || perm != "") { : String[] permArray = perm.split(";"); : ... : } : 2 : String ruleArr[] = ruleName.split(","); : if (ruleArr != null && ruleArr.length > 0) {
|
z****e 发帖数: 54598 | 3 好几个错啊
比如string比较应该用.equals("")
!=""这个对于String s = new String("");
这种就挂了
还有||显然是&&
最后下划线定义变量名,这个是c,python程序员才这么干的
java几乎不用下划线来命名
【在 W***o 的大作中提到】 : 大牛,这些代码转成专业写法应该怎么写?
|
z****e 发帖数: 54598 | 4 3那个比较搞笑
写了一大段等于没写
我猜想本意是
pFilterDTO != null
如果dto为null的话,这里直接抛一个nullpointerexception |
o***g 发帖数: 2784 | 5 我以前私有成员变量喜欢在最开始加个下划线
后来用了spring把我这毛病给改了
【在 z****e 的大作中提到】 : 好几个错啊 : 比如string比较应该用.equals("") : !=""这个对于String s = new String(""); : 这种就挂了 : 还有||显然是&& : 最后下划线定义变量名,这个是c,python程序员才这么干的 : java几乎不用下划线来命名
|
a*w 发帖数: 4495 | 6 Java String是immutable的,用==无妨
mutable的才需要用equals
【在 z****e 的大作中提到】 : 好几个错啊 : 比如string比较应该用.equals("") : !=""这个对于String s = new String(""); : 这种就挂了 : 还有||显然是&& : 最后下划线定义变量名,这个是c,python程序员才这么干的 : java几乎不用下划线来命名
|
d****i 发帖数: 4809 | 7 This is NOT true. .equals() to test the string value. == to test if they are
the same obj.
【在 a*w 的大作中提到】 : Java String是immutable的,用==无妨 : mutable的才需要用equals
|
a*w 发帖数: 4495 | 8 因为String是immutable的,同样内容的String变量在同一个VM里共用一个
Object。所以用==和equals比较的结果是相同的。
are
【在 d****i 的大作中提到】 : This is NOT true. .equals() to test the string value. == to test if they are : the same obj.
|
o***g 发帖数: 2784 | 9 我以前也记得是这样
最近发现都不这么说了,系统里可能会有两个"string"
【在 a*w 的大作中提到】 : 因为String是immutable的,同样内容的String变量在同一个VM里共用一个 : Object。所以用==和equals比较的结果是相同的。 : : are
|
d****i 发帖数: 4809 | 10 Take a look at the following test, you will know that you can't use == to
compare string value equal.
@Test
public void testString() {
String s1 = new String("Hello");
String s2 = new String("Hello");
String s3 = "Hello";
String s4 = "Hello";
assertTrue(s1.equals(s2)); //true
assertTrue(s1==s2); //false
assertTrue(s3==s4); //true
assertTrue(s1==s3); //false
}
【在 a*w 的大作中提到】 : 因为String是immutable的,同样内容的String变量在同一个VM里共用一个 : Object。所以用==和equals比较的结果是相同的。 : : are
|
|
|
Y**G 发帖数: 1089 | 11 String a = new String("a")
String b = new String("a");
a == b : false
a.equals(b): true
【在 a*w 的大作中提到】 : 因为String是immutable的,同样内容的String变量在同一个VM里共用一个 : Object。所以用==和equals比较的结果是相同的。 : : are
|
x******m 发帖数: 736 | 12 大家都不动手写code啊,要不就不会说用==来比较string了。 |
z****e 发帖数: 54598 | 13 这个你动手试试就知道了
【在 a*w 的大作中提到】 : Java String是immutable的,用==无妨 : mutable的才需要用equals
|
z****e 发帖数: 54598 | 14 s1 = "a"
s2 = new String("a")
其实s2是指向了一个heap,然后这个heap里面会存s1存的那个地址
所以当你用==比较的时候,就不会一样
这个也符合new这个关键字的本意
你试试就知道了
还有就是jvm本身有可能不一样
所以这种比较还是不要做
最常见的就是enum
这个就不要用==,虽然同jvm不会出问题
但是一旦垮jvm,就挂了
【在 a*w 的大作中提到】 : 因为String是immutable的,同样内容的String变量在同一个VM里共用一个 : Object。所以用==和equals比较的结果是相同的。 : : are
|
T*******x 发帖数: 8565 | 15 是不是你太挑剔了?看大家讨论了半天也没有特别奇葩的代码啊。一两个小错误。或者
你是指编程风格?
【在 a*********7 的大作中提到】 : 简直不能相信自己的眼睛。嗯,这些代码是外包公司写的。 : 1 : String perm = something; : if (perm != null || perm != "") { : String[] permArray = perm.split(";"); : ... : } : 2 : String ruleArr[] = ruleName.split(","); : if (ruleArr != null && ruleArr.length > 0) {
|
a*********7 发帖数: 30080 | 16 不是我挑剔吧。。。错误大家前面都讨论了,都是programing fundamentals
比如说第一个例子,if (perm != null || perm != "") ,一句简单的话两个错误,该
用&& 他用了||,该用!equals()他用!=。
第二个例子,也是简单一句话,
if (null != ruleArr[iCount] || ruleArr[iCount].length() > 0
|| ruleArr[iCount] != "")
三个错,1)该用&& 他用了|| 2) 该用!equals()他用!= 3)length() > 0 和 != ""
是同样意思,无用代码。
第三个例子是典型的脱裤子放屁。
编程风格这么高深的东西我还真没顾上。。。
关键这些都是最最基本的东西啊。现在印度马工找工作完全没要求的吗。。。
【在 T*******x 的大作中提到】 : 是不是你太挑剔了?看大家讨论了半天也没有特别奇葩的代码啊。一两个小错误。或者 : 你是指编程风格?
|
a*********7 发帖数: 30080 | |
a****i 发帖数: 1182 | 18
用&& 用||,我觉得你的理解不太对。这个是判断perm是不是个空的,空的意思包括
null, "", " ",和各种空白字符,他没有trim,其实还不太完整。这是个很常见的判
断。
"
【在 a*********7 的大作中提到】 : 不是我挑剔吧。。。错误大家前面都讨论了,都是programing fundamentals : 比如说第一个例子,if (perm != null || perm != "") ,一句简单的话两个错误,该 : 用&& 他用了||,该用!equals()他用!=。 : 第二个例子,也是简单一句话, : if (null != ruleArr[iCount] || ruleArr[iCount].length() > 0 : || ruleArr[iCount] != "") : 三个错,1)该用&& 他用了|| 2) 该用!equals()他用!= 3)length() > 0 和 != "" : 是同样意思,无用代码。 : 第三个例子是典型的脱裤子放屁。 : 编程风格这么高深的东西我还真没顾上。。。
|
s*****c 发帖数: 753 | 19 So if perm is null, what do you expect the code will execute? if, or else?
Can you find a scenario that the else clause will ever get executed?
if (perm != null || perm != "")
else
【在 a****i 的大作中提到】 : : 用&& 用||,我觉得你的理解不太对。这个是判断perm是不是个空的,空的意思包括 : null, "", " ",和各种空白字符,他没有trim,其实还不太完整。这是个很常见的判 : 断。 : "
|
a*********7 发帖数: 30080 | 20 用||的话,那个if expression永远为真(即使不等号改正为!equals()),因为没有一
个String同时是null又是""
所以如果perm = null, perm.split(";")会被执行,得到nullpointer exception.
if (perm != null || perm != "") {
String[] permArray = perm.split(";");
...
}
【在 a****i 的大作中提到】 : : 用&& 用||,我觉得你的理解不太对。这个是判断perm是不是个空的,空的意思包括 : null, "", " ",和各种空白字符,他没有trim,其实还不太完整。这是个很常见的判 : 断。 : "
|
|
|
a****i 发帖数: 1182 | 21 对,我这个想错了,应该是用&&的
用||完全是一个bug,unit test就通不过
【在 a*********7 的大作中提到】 : 用||的话,那个if expression永远为真(即使不等号改正为!equals()),因为没有一 : 个String同时是null又是"" : 所以如果perm = null, perm.split(";")会被执行,得到nullpointer exception. : if (perm != null || perm != "") { : String[] permArray = perm.split(";"); : ... : }
|
S***A 发帖数: 133 | 22 nonono,对string来说,==是用来比较地址,而equals才是比较两个字符串是否真的一
致。
【在 a*w 的大作中提到】 : Java String是immutable的,用==无妨 : mutable的才需要用equals
|
g*****g 发帖数: 34805 | 23 都别争了,调用StringUtils.isBlank, isEmpty才是这种代码的标准写法。 |
z***s 发帖数: 3241 | 24 如果不用commons,guava的呢? 都不是好公司?
【在 g*****g 的大作中提到】 : 都别争了,调用StringUtils.isBlank, isEmpty才是这种代码的标准写法。
|
g*****g 发帖数: 34805 | 25 这种基础轮子都不用的公司,不做也罢。我老人家虽然是码农,也码些有附加值的东西
,重复做轮子趁早走人。
【在 z***s 的大作中提到】 : 如果不用commons,guava的呢? 都不是好公司?
|
z***s 发帖数: 3241 | 26 是不是流行的基本就是这二选一了?
【在 g*****g 的大作中提到】 : 这种基础轮子都不用的公司,不做也罢。我老人家虽然是码农,也码些有附加值的东西 : ,重复做轮子趁早走人。
|
c*********r 发帖数: 2733 | 27 facepalm....
when compare string, below is the better way if StringUtils is not used.
String str;
if("bla".equals(str)){
} |
w*****6 发帖数: 14 | 28 String 是完全可以用 == 判断null 和“”(长度为0的字符串)的。
if (perm != null || perm != "") 逻辑确实是错误的。
null != String 变量的写法无疑是非常恶心的。 |
g*****g 发帖数: 34805 | 29 二选二吧。
【在 z***s 的大作中提到】 : 是不是流行的基本就是这二选一了?
|
z***s 发帖数: 3241 | 30 我的意思是这两个最流行,挑哪个都行。
【在 g*****g 的大作中提到】 : 二选二吧。
|
|
|
h***y 发帖数: 91 | 31 这种写法都是javascript那帮人用的。不这末写有时候死都不知道怎么死的。
【在 w*****6 的大作中提到】 : String 是完全可以用 == 判断null 和“”(长度为0的字符串)的。 : if (perm != null || perm != "") 逻辑确实是错误的。 : null != String 变量的写法无疑是非常恶心的。
|
z****e 发帖数: 54598 | 32 各位同学们的基本功要好好强化一下
string的比较不能用==是一个基本原则
除了primitive type,其他全部都不能用==,无脑记住就好了
当然要深究下去,需要了解一下jvm是怎么实现的
string pool这些,但是了解一点是不够的,要深入一点
尤其是垮虚拟机之类的,其实还不如无脑记那条rule算了
打开ide,执行一下以下代码就明白了
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
String s1 = "";
String s2 = new String("");
System.out.println(s1==s2);
}
}
【在 w*****6 的大作中提到】 : String 是完全可以用 == 判断null 和“”(长度为0的字符串)的。 : if (perm != null || perm != "") 逻辑确实是错误的。 : null != String 变量的写法无疑是非常恶心的。
|
z****e 发帖数: 54598 | 33 !=null可以不用调换
以前都是!"".equals(var)这种写法比较多
不过如果有!=null加&&的话,两个都不需要掉头
现在太多非java程序员转行写java,各种坏习惯都带过来
【在 h***y 的大作中提到】 : 这种写法都是javascript那帮人用的。不这末写有时候死都不知道怎么死的。
|
h***y 发帖数: 91 | 34 所有封装过的对象都不能用==。不然比的是对象地址,未有什么意义。
【在 w*****6 的大作中提到】 : String 是完全可以用 == 判断null 和“”(长度为0的字符串)的。 : if (perm != null || perm != "") 逻辑确实是错误的。 : null != String 变量的写法无疑是非常恶心的。
|
x*****p 发帖数: 1707 | 35 版上Java盲真多。基本概念都不懂也跑上来丢人。 |
l**p 发帖数: 6080 | 36 第三个,null能做左操作数?
"
【在 a*********7 的大作中提到】 : 不是我挑剔吧。。。错误大家前面都讨论了,都是programing fundamentals : 比如说第一个例子,if (perm != null || perm != "") ,一句简单的话两个错误,该 : 用&& 他用了||,该用!equals()他用!=。 : 第二个例子,也是简单一句话, : if (null != ruleArr[iCount] || ruleArr[iCount].length() > 0 : || ruleArr[iCount] != "") : 三个错,1)该用&& 他用了|| 2) 该用!equals()他用!= 3)length() > 0 和 != "" : 是同样意思,无用代码。 : 第三个例子是典型的脱裤子放屁。 : 编程风格这么高深的东西我还真没顾上。。。
|
w****r 发帖数: 15252 | 37 写第一个的肯定是写script写惯了
在前后台切换写代码,我也会老干这种事情,哈哈 |