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()));
就好了。
写了一个从文件里读字符串的函数:
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()));
就好了。
相关文章推荐
- java容易犯错的地方
- Java中容易犯错的一个地方(转)
- python处理字符串数据容易犯错的几个地方
- javascript sort方法容易犯错的地方
- Java中容易出现乱码的地方以及解决方法
- jsp容易混淆的几个地方
- Java线程同步容易犯错的坑
- Java中容易出现乱码的地方以及解决方法
- java编程中容易犯错的地方之BigInteger
- 宏定义的使用容易犯错的地方---提醒
- java的一些容易出错的地方!
- 笔记--10--Android 几个常见异常且容易被忽略的地方
- java打包exe程序需要注意的几个地方
- 关于Java字符编码几个容易弄错的问题
- java项目写yml配置文件时候需要注意的几个地方
- java几个容易混淆的问题
- Java向前引用容易出错的地方
- Java向前引用容易出错的地方
- java谜题--Thread.join()方法容易忽略的地方
- 几个提升java性能需要注意的地方