由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Java版 - 最近Code Review看到的奇葩代码
相关主题
请教一段代码,关于hashCode()问HashSet的问题?
Weblogic 8.1又一个问题---应该是有关JDBC的向各位朋友请教一道题目
怎么返回空指针呢?关于==和equals
Re: String newvalue = value.replaceAll("问个set和literal String的问题
问个exception的问题也问个 HashMap问题
一个简单的关于java Map的问题Object比较
Java练习题 3java问题:如何match两个正规表达式
问个hashtable实现问题java string stream
相关话题的讨论汇总
话题: string话题: icount话题: rulearr话题: null话题: perm
进入Java版参与讨论
1 (共1页)
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

相关主题
一个简单的关于java Map的问题问HashSet的问题?
Java练习题 3向各位朋友请教一道题目
问个hashtable实现问题关于==和equals
进入Java版参与讨论
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
17
补充了几个例子
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,其实还不太完整。这是个很常见的判
: 断。
: "

相关主题
问个set和literal String的问题java问题:如何match两个正规表达式
也问个 HashMap问题java string stream
Object比较出个简单题,看你Java APi熟悉到什么程度
进入Java版参与讨论
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 的大作中提到】
: 二选二吧。
相关主题
eclipse question,please helpWeblogic 8.1又一个问题---应该是有关JDBC的
紧急求教,JAVA程序如何启动浏览器怎么返回空指针呢?
请教一段代码,关于hashCode()Re: String newvalue = value.replaceAll("
进入Java版参与讨论
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写惯了
在前后台切换写代码,我也会老干这种事情,哈哈
1 (共1页)
进入Java版参与讨论
相关主题
java string stream问个exception的问题
出个简单题,看你Java APi熟悉到什么程度一个简单的关于java Map的问题
eclipse question,please helpJava练习题 3
紧急求教,JAVA程序如何启动浏览器问个hashtable实现问题
请教一段代码,关于hashCode()问HashSet的问题?
Weblogic 8.1又一个问题---应该是有关JDBC的向各位朋友请教一道题目
怎么返回空指针呢?关于==和equals
Re: String newvalue = value.replaceAll("问个set和literal String的问题
相关话题的讨论汇总
话题: string话题: icount话题: rulearr话题: null话题: perm