JAVA中字符串数组的比较
我在for循环中有以下代码,以查看字符串是否等于搜索字符串:JAVA中字符串数组的比较,java,arrays,nullpointerexception,Java,Arrays,Nullpointerexception,我在for循环中有以下代码,以查看字符串是否等于搜索字符串: if(Data.coord[i].equals(Data.search)) 我已经用精确的值测试了代码,即如果1=1,代码的其余部分工作正常。它只是不喜欢字符串比较。控制台显示此错误: Exception in thread "main" java.lang.NullPointerException at highercoursework.Search.main(Search.java:16) at highercoursework
if(Data.coord[i].equals(Data.search))
我已经用精确的值测试了代码,即如果1=1,代码的其余部分工作正常。它只是不喜欢字符串比较。控制台显示此错误:
Exception in thread "main" java.lang.NullPointerException
at highercoursework.Search.main(Search.java:16)
at highercoursework.Main.main(Main.java:16)
谢谢您的数组中有一个未填充的元素,即
Data.coord[i]
是
null
。请注意,Data.search可以为null,但equals()
方法将处理此问题。您只需要首先执行元素检查。您的数组中有一个未填充的元素,即
Data.coord[i]
是
null
。请注意,Data.search可以为null,但equals()
方法将处理此问题。您只需要首先执行元素检查。您应该将常数与参数进行比较,因为它可以是null
例如,如果要搜索的Data.search
是一个常数,则应执行以下操作:
if(Data.search.equals(Data.coord[i]))
在这种情况下,您不会试图调用
null
引用上的方法,也不需要不必要的null
检查。您应该将常量与参数进行比较,因为它可以是null
String[] coord = new String[100];
例如,如果要搜索的Data.search
是一个常数,则应执行以下操作:
if(Data.search.equals(Data.coord[i]))
在这种情况下,您不会试图在null
引用上调用方法,也不需要不必要的null
检查
String[] coord = new String[100];
这意味着您可以将某些内容分配给coord[0],但在分配之前,coord[0]为空。因此出现了空指针异常
你可以试试
String data= Data.coord[i];
if(data != null && data.equals(Data.search))
这意味着您可以将某些内容分配给coord[0],但在分配之前,coord[0]为空。因此出现了空指针异常
你可以试试
String data= Data.coord[i];
if(data != null && data.equals(Data.search))
试试这个:
if(DATA != null && Data.coord[i].equals(Data.search))
试试这个:
if(DATA != null && Data.coord[i].equals(Data.search))
读这篇文章来理解
如果coord[]已正确初始化,Data.coord[i]
的值可能为空。你可以查一下
if(Data.coord[i] != null && Data.coord[i].equals(Data.search)) {}
读这篇文章来理解
如果coord[]已正确初始化,Data.coord[i]
的值可能为空。你可以查一下
if(Data.coord[i] != null && Data.coord[i].equals(Data.search)) {}
您可以通过两种方式避免问题:
- 在这种情况下,coord[i]不应为null
if (Data.coord[i] != null) { if(Data.coord[i].equals(Data.search)) { } } else { logger.error("Unexpected Behavior: coord[i] should not be null"); }
- 在这种情况下,您的坐标[i]可以为空
if (Data.search.equals(Data.coord[i])) {}
您可以通过两种方式避免问题:
- 在这种情况下,coord[i]不应为null
if (Data.coord[i] != null) { if(Data.coord[i].equals(Data.search)) { } } else { logger.error("Unexpected Behavior: coord[i] should not be null"); }
- 在这种情况下,您的坐标[i]可以为空
if (Data.search.equals(Data.coord[i])) {}
在调试模式下重新启动并设置断点。数组在数据类中初始化:静态字符串[]坐标=新字符串[100];但是,如果该数组不需要任何数据,那么它只会存储为空值。您确定我是
data.coord[]
的有效键吗?我建议将此行拆分为单独的行,以便您可以从日志中调试此问题。空指针可以是Data.coord或Data.coord[i]甚至Data.search。另一件事是调试字符串数组似乎不是initialisedRestart,而是在调试模式下设置断点。数组是在一个数据类中初始化的:static String[]coord=new String[100];但是,如果该数组不需要任何数据,那么它只会存储为空值。您确定我是data.coord[]
的有效键吗?我建议将此行拆分为单独的行,以便您可以从日志中调试此问题。空指针可以是Data.coord或Data.coord[i]甚至Data.search。另一件事是调试你的字符串数组似乎不是initialisedah对的,我想不出一个方法来避免这个。我可以先对ifs进行检查,检查值是否为空,然后只比较非空值?不,你应该调用equals()
对象,你知道它存在,因此使用我答案中的形式。在比较对象时,这被认为是一种良好的做法。在你已经知道的对象上总是调用equals()
,如果可能的话,它不是空的。我认为@AdamArold是绝对正确的,从逻辑上讲,它为你省去了麻烦,并且避免了你的异常,这是更合适的方法啊,对了,我想不出一种方法来避免这种情况。我可以先对ifs进行检查,检查值是否为空,然后只比较非空值?不,你应该调用equals()
对象,你知道它存在,因此使用我答案中的形式。在比较对象时,这被认为是一种良好的做法。如果可能的话,总是在你已经知道的对象上调用equals()
。我认为@AdamArold是绝对正确的,从逻辑上讲它为你省去了麻烦,并且避免了你的异常,这是一种更合适的方法,在这种情况下,他必须对一个对象进行null检查。但在这种情况下,我们知道Data.search
是一个常数。我们知道吗?我不确定这是否是明确的(在我看来,这就像是用户输入值或类似的值),我是从上下文中假设的。可能是空的,但我真的不这么认为。在这种情况下,他必须检查一个空的。但在这种情况下,我们知道Data.search
是一个常数。我们知道吗?我不确定这是否是明确的(在我看来,这就像是用户输入值或类似的值),我是从上下文中假设的。可能是空的,但我真的不这么认为。