您的位置:首页 > 编程语言 > Java开发

Java中几个容易犯错的地方

2012-05-07 08:59 507 查看
1,byte[]的长度

写了一个从文件里读字符串的函数:

public static String readFile(String fFileName){//, String fEncoding) {

char[] buffer = new char[1024];

StringBuilder text = new StringBuilder();

InputStreamReader reader = null;

try {

reader = new InputStreamReader(new FileInputStream(fFileName));

while (reader.read(buffer, 0, 1024)!=-1){

text.append(buffer); <==有错

}

}

catch(Exception e){

e.printStackTrace();

}

finally{

if(reader!=null){

try {

reader.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

return text.toString();

}

粗看这段代码没有问题。但是读出的字符总比实际要多。问题在text.append(buffer)。 buffer是一个1024的char数组。每次append固定的1024个char.改成就好了。

reader = new InputStreamReader(new FileInputStream(fFileName));

int readed;

while ((readed = reader.read(buffer, 0, 1024))!=-1){

text.append(new String(buffer, 0, readed));

}

2,优先级的错误

Log.d(TAG, "location="+where+", "+locationService==null?"null":locationService.getLocation());

这行代码的本意是如果locationService==null,就输出"null",避免NullPointerException.但实际上仍然发生NullPointerException.原来"+"的优先级大于"?",所以上面代码实际上是:

Log.d(TAG, ("location="+where+", "+locationService)==null?"null":locationService.getLocation())

括号里的当然不会是null.改成

Log.d(TAG, "location="+where+", "+(locationService==null?"null":locationService.getLocation()));

就好了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息