This question already has answers here:
What is a NullPointerException, and how do I fix it?
(12个答案)
3年前关闭。
我正在做一个Rest集成项目,并且正在尝试对我要实现的API进行PUT api请求。这是PUT操作实现开始时的代码的一部分。
问题是,当我执行请求时,它返回了在那里声明的
使用代码时,我发现错误是因为对象
但是在这里我开始什么都不懂。我更改了代码以尝试查找错误的出处,将名称字符串直接像这样放置:
这很完美。这将导致认为问题出在参数对象
那么,问题出在哪里呢?类型有问题吗?但是
而以下不
这可能意味着
如果您将两个字符串声明为文字,那么使用
请阅读What is String pool in Java?以获取有关Java中的字符串池的更多详细信息。
在Java中比较字符串的正确方法是
(12个答案)
3年前关闭。
我正在做一个Rest集成项目,并且正在尝试对我要实现的API进行PUT api请求。这是PUT操作实现开始时的代码的一部分。
String name = vivienda.getName();
Vivienda oldVivienda = repository.getViviendas(name);
if (oldVivienda == null) {
throw new NotFoundException("No se ha encontrado ninguna vivienda con el nombre="+ vivienda.getName());
}
问题是,当我执行请求时,它返回了在那里声明的
NotFoundException
,所以它不起作用。使用代码时,我发现错误是因为对象
oldVivienda
当然是null
,好像我尝试对其getName
进行操作时一样,它将抛出NullPointerException
。但是在这里我开始什么都不懂。我更改了代码以尝试查找错误的出处,将名称字符串直接像这样放置:
Vivienda oldVivienda = repository.getViviendas("vivienda1");
if (oldVivienda == null) {
throw new NotFoundException("No se ha encontrado ninguna vivienda con el nombre="+ vivienda.getName());
}
这很完美。这将导致认为问题出在参数对象
vivienda
上,即其名称为空或不是“vivienda1”。但是,还记得例外吗?在例外情况下,我使用vivienda.getName()
,并且当我看到响应中引发的错误时,它实际上会显示“vivienda1”。因此,我很好地发送了该对象,当您执行vivienda.getName()
时,它返回“vivienda1”。并且当您将字符串“vivienda1”放入repository.getViviendas("vivienda1")
时,它可以完美工作。那么,问题出在哪里呢?类型有问题吗?但是
getName
是返回String的简单get方法。我已经检查了好几次,是否有地方或其他地方。错误在于前两行代码,但我不知道发生了什么。 最佳答案
如果此代码有效
repository.getViviendas("vivienda1");
而以下不
repository.getViviendas(name); // name is "vivienda1"
这可能意味着
String
比较在repository
内部没有正确完成。如果您将两个字符串声明为文字,那么使用
==
运算符进行的比较将成功,因为它们将存储在字符串池中。但是,如果这些字符串之一的值是动态输入的(例如来自RESTful API客户端),则它将不起作用。请阅读What is String pool in Java?以获取有关Java中的字符串池的更多详细信息。
在Java中比较字符串的正确方法是
.equals()
方法:someString.equals(otherString);
10-08 13:26