在课堂上,我有:
private Foo bar;
public Constructor(Foo bar)
{
this.bar = bar;
}
Run Code Online (Sandbox Code Playgroud)
而不是从参数中提供的对象创建bar的副本,是否可以在构造函数中包含指向bar的指针,以便更改原始栏会更改此对象中的字段?
另一种方式:
int x = 7;
int y = x;
x = 9;
System.out.print(y); //Prints 7.
Run Code Online (Sandbox Code Playgroud)
可以将其设置为打印y打印9而不是7?
aio*_*obe 16
当变量用作方法的参数时,它的内容总是被复制.(Java 只有 按值调用.)这里要理解的重要一点是,你只能通过引用引用对象.因此,当您传递引用对象的变量时实际发生的是您将引用传递给对象(按值!).
有人可能会告诉你"基元通过值传递"和"非基元通过引用传递",但这仅仅是因为变量永远不能包含一个开始的对象,只能引用一个对象.当有人理解这一点时,他会同意甚至引用对象的变量都是按值传递的.
Java始终是按值传递的.困难的是可以理解Java将对象作为值传递的引用传递.
来自http://www.javaworld.com/javaworld/javaqa/2000-05/03-qa-0526-pass.html
Java通过引用操作对象,并且所有对象变量都是引用.但是,Java不通过引用传递方法参数; 它按值传递它们.
在Java中,原语的C++"引用类型"没有对应部分.
您的上一个示例以这种方式工作,因为int是基元,它是按值复制的.在第一个示例中," this.bar "将保留引用的副本(类型指针)到bar.因此,如果您更改原始栏(内部),则更改将反映在您的班级中.试试吧.
归档时间: |
|
查看次数: |
15261 次 |
最近记录: |