通过方法返回的重新选择参考
Reassign reference returned by a method
我有以下代码:
public class Foo {
Bar mineBar;
class Bar {
int a;
public Bar(int a) {
this.a=a;
}
}
Bar getBar() {
return mineBar;
}
void reassingBar() {
//getBar()=new Bar(10); //doesn't work
mineBar=new Bar(10);
}
public static void main(String[] args) {
}
}
您的问题是,如果getBar()
返回Bar
,那么为什么我不能只使用返回的Bar
并将其重新分配给对新对象的引用?我想知道在C 中是否有所不同?
这只是指定Java的方式。从JLS SEC 15.26来看,作业的语法由:
给出:Assignment: LeftHandSide AssignmentOperator Expression LeftHandSide: ExpressionName FieldAccess ArrayAccess
因此,LHS必须是变量,字段或数组元素。其他任何内容都是无效的语法。
您不能重新分配方法的返回值的原因是,Java始终是按价值传递的。getBar()
方法返回的"引用"不是Foo.bar
字段,它是一个有效的新变量,也指向与Foo.bar
字段相同的对象。因此,重新分配变量对Foo.bar
字段的值没有影响。
,由于该"变量"仅在评估表达式时才存在,因此允许它没有意义:您不妨直接使用RHS的值。
与以下内容没有什么不同:
Object a = new Object();
Object b = a; // a and b now refer to the same object.
b = new Object(); // This reassigns b, but not a.
相关文章:
- 如何使用默认参数等选择模板专业化
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 选择要调用的构造函数
- C++选择排序算法中的逻辑错误
- C++错误消息*成员参考.**初学者*
- QTreeView幻灯片多选后无法使用单击选择
- 无法获取菜单选择以运行函数.C++
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 在决定是通过参考还是通过价值时,尺寸真的是一个问题吗
- 参考资源文件VC++中的$(SolutionDir)
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 在C++中,如何通过几种类型从元组中选择多个元素
- 讨论 - 创建矩阵时的数组与向量的向量 - 什么是最实用的选择
- 对可变参数使用声明.如何选择正确的功能
- 选择选举获胜者的程序
- 为什么在运算符重载时需要参考?
- 如何选择在 csv 文件中输出的位置
- 根据用户回答声明"Players"。用户选择玩家数量。播放器是结构体
- 通过方法返回的重新选择参考
- 在参考 (T&) 和常量指针 (T* 常量) 之间进行选择