为什么编译器会抓狂?我应该能够修改返回的对象,如果java返回一个对象引用的权利?
class Cat{
String name;
Cat(String name){
this.name = name;
}
public String getName() {
return name;
}
public static void main(String[] args) {
Cat askalu = new Cat("Askalu");
//this causes an error
askalu.getName() = "Atnafu";
// But this don't
askalu.name = "Atnafu";
}
}
这是“值”和“变量”之间的区别。当一个方法返回一个字符串而不返回一个变量时,可以通过执行string s=askalu将其变为变量。getName()
但是使用字符串(比如int)执行此操作时,不会在更改原始字符串时更改它。如果要在变量为private时更改名称,必须有一个setter,如public void setName(String newName){name=newName;}
//this causes an error
askalu.getName() = "Atnafu";
这与参考传递无关。不允许在=
句点的左侧进行函数调用。为了更好地理解这一点,我建议你阅读一下左值和右值之间的区别。
为什么编译器会抓狂?我应该能够修改返回的对象,如果java返回一个对象引用的权利?
一个标准的习语是 所以如果这行得通,为什么我不能说 g表示“
我了解在lambda中捕获此(修改对象属性)的正确方法如下: 但我对我所看到的以下特点感到好奇: 我感到困惑(并希望得到回答)的奇怪之处在于,为什么以下方法有效: 以及为什么我无法通过引用明确捕获此内容:
注意,包括在内的log语句实际上可以抛出一个NPE,然后捕获并记录该NPE。这并不漂亮,但这也不是这里的重点。 最终,无论是否有值,我都会返回它。 在值的情况下,客户端将收到HTTP 204状态码。这是显示的内容: null 谢谢 这里有一个关于相同主题的很好的问题:当没有找到REST资源时返回404是正确的吗?
问题内容: 我有一个简单的POJO,我用REST注释进行了注释,如下所示: 请注意,包括d.getName()的日志语句实际上可以引发NPE,然后将其捕获并记录。那不是很漂亮,但这里也不是重点。 最终d是否具有值,我将其返回。 如果为空值,我的客户端会收到HTTP 204状态代码。这是wget显示的内容: 奇怪的是,我的浏览器没有动弹不得。它们仍显示前一页(我想在没有内容接收时保持原样是有意义的)
问题内容: 我已经阅读了每个原始数据类型和对象引用通过值传递的地方吗? 我曾尝试在Google中搜索为什么Java不支持按引用传递,但 我只得到Java不支持按引用传递, 而且 我找不到背后的任何原因 。 为什么不能通过引用传递原始数据类型? 编辑: 假定它是主观和争论的,大多数人都关闭了我的问题。 好吧,不是,它有一个明确的答案,我的问题就像你为什么不能创建抽象类的对象,并且它也不是重复的,因为