当前位置: 首页 > 知识库问答 >
问题:

如果Java通过引用。为什么我不能像这样修改返回的对象[重复]

严嘉良
2023-03-14

为什么编译器会抓狂?我应该能够修改返回的对象,如果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";
    
        }
        
    }

共有2个答案

洪楚
2023-03-14

这是“值”和“变量”之间的区别。当一个方法返回一个字符串而不返回一个变量时,可以通过执行string s=askalu将其变为变量。getName()但是使用字符串(比如int)执行此操作时,不会在更改原始字符串时更改它。如果要在变量为private时更改名称,必须有一个setter,如public void setName(String newName){name=newName;}

颜奇希
2023-03-14
            //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不支持按引用传递, 而且 我找不到背后的任何原因 。 为什么不能通过引用传递原始数据类型? 编辑: 假定它是主观和争论的,大多数人都关闭了我的问题。 好吧,不是,它有一个明确的答案,我的问题就像你为什么不能创建抽象类的对象,并且它也不是重复的,因为