Java 为什么我在';我正在检查数组字符串是否为空?
为什么我在下面的第二条if语句中出现空指针错误 我正在检查if语句,看看数组字符串Java 为什么我在';我正在检查数组字符串是否为空?,java,android,arrays,string,nullpointerexception,Java,Android,Arrays,String,Nullpointerexception,为什么我在下面的第二条if语句中出现空指针错误 我正在检查if语句,看看数组字符串scores是否为空,但它总是在说nullpointer exception时崩溃。如果有帮助的话,我还添加了LogCat String[] scores; String times = ""; public void Read() { FileInputStream inputStream = null; try { inputStream = openFileInput("
scores
是否为空,但它总是在说nullpointer exception时崩溃。如果有帮助的话,我还添加了LogCat
String[] scores;
String times = "";
public void Read() {
FileInputStream inputStream = null;
try {
inputStream = openFileInput("timesfile");
byte[] reader = new byte[inputStream.available()];
while (inputStream.read(reader) != -1) {
}
times = new String(reader);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
if (!times.isEmpty() && times != null && times != ""
&& times.length() != 0)
{
scores = new String(times).split(",");
Arrays.sort(scores);
}
if (scores.length != 0 && scores != null && scores.length >= 4) { //I get a nullpointer exception here!
better = false;
if (Integer.parseInt(endTime.split(":")[0]) > Integer
.parseInt(scores[0].split(":")[0])) {
better = true;
} else if (Integer.parseInt(endTime.split(":")[1]) > Integer
.parseInt(scores[0].split(":")[1])) {
better = true;
} else if (Integer.parseInt(endTime.split(":")[2]) > Integer
.parseInt(scores[0].split(":")[2])) {
better = true;
} else {
better = false;
}
}
}
日志:
11-16 22:32:21.195: E/AndroidRuntime(28584): FATAL EXCEPTION: Thread-2278
11-16 22:32:21.195: E/AndroidRuntime(28584): java.lang.NullPointerException
11-16 22:32:21.195: E/AndroidRuntime(28584): at com.example.app.TestActivity$TestView.scoreRead(TestActivity.java:426)
11-16 22:32:21.195: E/AndroidRuntime(28584): at com.example.app.TestActivity$TestView.over(TestActivity.java:303)
11-16 22:32:21.195: E/AndroidRuntime(28584): at com.example.app.TestActivity$TestView.run(TestActivity.java:267)
11-16 22:32:21.195: E/AndroidRuntime(28584): at java.lang.Thread.run(Thread.java:856)
如果(times!=null)首先执行
然后嵌套在那做!times.isEmpty()
isEmpty()检查字符串的长度是否为零。不管它是否为null,都不会。0的长度为“”
,不为空
如果它是另一个正在检查的字符串,那么同样的原则也适用于该字符串
然后嵌套在那做!times.isEmpty()
isEmpty()检查字符串的长度是否为零。不管它是否为null,都不会。0的长度为“”
,不为空
如果正在检查的是另一个字符串,同样的原则也适用您可以尝试保持
时间吗!=最左侧为null
。操作顺序是从左到右
if(times!=null&&!times.isEmpty()&×!=“&×.length()!=0)
编辑:
是的,西蒙是对的<代码>次数!=“应该是!倍。相等(“”)
但无论如何,您已经在检查!times.isEmpty()
所以你根本不需要那一块
这应该做到:
if(times!=null&&!times.isEmpty())
你能试着保持
时间吗!=最左侧为null
。操作顺序是从左到右
if(times!=null&&!times.isEmpty()&×!=“&×.length()!=0)
编辑:
是的,西蒙是对的<代码>次数!=“应该是!倍。相等(“”)
但无论如何,您已经在检查!times.isEmpty()
所以你根本不需要那一块
这应该做到:
if(times!=null&&!times.isEmpty())
这不是一张安全支票
times != ""
字符串的相等运算符测试两个字符串是否为同一对象。相反,使用
!times.equal("")
=代码>有时可能会起作用,因为Java“实习生”字符串可能是同一个对象,但您不应该依赖于它。这不是一个安全检查
times != ""
字符串的相等运算符测试两个字符串是否为同一对象。相反,使用
!times.equal("")
=代码>有时可能有效是“”,因为Java“实习生”字符串可能是同一个对象,但您不应该依赖于它。您的问题和您的注释不匹配,但是,无论您是检查分数
还是检查次数
,您都必须首先检查它们是否为null
。(否则,您将看到NPE。)
使用:
以及:
为什么我在下面的第二条if语句中出现空指针错误
当您尝试对null
的变量调用方法时,会发生NullPointerException。因此,如果scores
为null
,则此代码scores.length
正在尝试调用null.doSomething()
。你不能要求什么都不做。你的问题和你的评论不匹配,但不管你是在检查分数
还是次数
,你必须先检查它们是否为空。(否则,您将看到NPE。)
使用:
以及:
为什么我在下面的第二条if语句中出现空指针错误
当您尝试对null
的变量调用方法时,会发生NullPointerException。因此,如果scores
为null
,则此代码scores.length
正在尝试调用null.doSomething()
。你不能要求什么都不做。实际上,只有当
!!times.isEmpty()&×!=空(&&次!=“”&×.length()!=0
这是真的。事情的发生是因为它不是真的:)。并且,在时间上调用方法并比较它是否为null是没有意义的。但是这里没有NPE,所以我们忽略它
!!times.isEmpty与times.legth相同0;
时代!=“”在使用“new”运算符初始化且未被暂存时始终为true
因此,所有条件都等于(如您所见,时间不是空的)
!!泰晤士报
无论如何,在涉及对选中对象调用方法的其他检查之前,您应该先检查null。实际上,只有当
!!times.isEmpty()&×!=空(&&次!=“”&×.length()!=0
这是真的。事情的发生是因为它不是真的:)。并且,在时间上调用方法并比较它是否为null是没有意义的。但是这里没有NPE,所以我们忽略它
!!times.isEmpty与times.legth相同0;
时代!=“”在使用“new”运算符初始化且未被暂存时始终为true
因此,所有条件都等于(如您所见,时间不是空的)
!!泰晤士报
无论如何,在涉及对选中对象调用方法的其他检查之前,应该先检查null。变量times不是null。她不是用空值初始化的,而是空值
可以在TestActivity类的第426行中找到NullPointerException。我认为这是:
if (scores.length != 0 && scores != null && scores.length >= 4) {
因此,如果您更仔细地研究代码,分数变量为空,因为上面的条件是错误的
为此更改您的代码:
if (!times.isEmpty())
{
scores = times.split(",");
Arrays.sort(scores);
}
if (scores != null && scores.length > 0) {
...
}
else {
System.err.println("There isn't score");
}
变量乘以不为空。她不是用空值初始化的,而是空值
可以在TestActivity类的第426行中找到NullPointerException。我认为这是:
if (scores.length != 0 && scores != null && scores.length >= 4) {
因此,如果您更仔细地研究代码,分数变量为空,因为上面的条件是错误的。
if (scores != null && scores.length >= 4) {
if (!times.isEmpty() && times != null && times != "" && times.length() != 0)
if (times != null && !times.isEmpty())