为什么编译器会抓狂?我应该能够修改返回的对象,如果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";
}
}
//this causes an error
askalu.getName() = "Atnafu";
这与引用传递无关。不允许在=< /code>的左侧调用函数。为了更好地理解这一点,我建议您阅读左值和右值之间的区别。
为什么编译器会抓狂?我应该能够修改返回的对象,如果java返回一个对象引用的权利?
问题内容: 我已经阅读了每个原始数据类型和对象引用通过值传递的地方吗? 我曾尝试在Google中搜索为什么Java不支持按引用传递,但 我只得到Java不支持按引用传递, 而且 我找不到背后的任何原因 。 为什么不能通过引用传递原始数据类型? 编辑: 假定它是主观和争论的,大多数人都关闭了我的问题。 好吧,不是,它有一个明确的答案,我的问题就像你为什么不能创建抽象类的对象,并且它也不是重复的,因为
一个标准的习语是 所以如果这行得通,为什么我不能说 g表示“
我了解在lambda中捕获此(修改对象属性)的正确方法如下: 但我对我所看到的以下特点感到好奇: 我感到困惑(并希望得到回答)的奇怪之处在于,为什么以下方法有效: 以及为什么我无法通过引用明确捕获此内容:
问题内容: 是否可以通过Java通过引用传递对象 就像在C#中一样 问题答案: 不,这在Java中是不可能的。 在Java中,方法的所有参数均按值传递。注意非原始型的的变量,它们是对对象的引用,也由值来传递:在这种情况下, 参考 是 由值来传递 。请注意,按值传递引用与按引用传递不同。
问题内容: 该程序给出6作为输出,但是当我取消注释第9行时,输出为5。为什么?我认为ba不应更改,主要应保持5。 问题答案: 在Java中传递对象时,它们将作为in 方法中引用的参考含义对象和method 中的参数传递,它们都指向同一对象,因此,当您将值更改为6时,它将反映在方法中。 现在,当您尝试执行此操作时,您将指向另一个对象,但仍指向您在方法中创建的对象,因此更新的值6在main方法中不可见