Java 我们应该在什么时候修改通过引用传递的对象?
在查看一些java代码时,我遇到了如下代码:Java 我们应该在什么时候修改通过引用传递的对象?,java,pass-by-reference,Java,Pass By Reference,在查看一些java代码时,我遇到了如下代码: Integer initialQ = someObject.getInitialQ(); Integer finalQ = null; BigDecimal factor = calculateFactor(initialQ, finalQ); if (finalQ.compareTo(initialQ) != 0){ //do something } finalQ在方法calculateFactor中修改 Eclipse在if(final
Integer initialQ = someObject.getInitialQ();
Integer finalQ = null;
BigDecimal factor = calculateFactor(initialQ, finalQ);
if (finalQ.compareTo(initialQ) != 0){
//do something
}
finalQ
在方法calculateFactor中修改
Eclipse在if(finalQ…
上给了我一个“Null指针访问:变量idunidadfail只能在此位置为Null”的警告。我理解,由于我们需要从该方法返回因子
,因此修改finalQ
的唯一方法是将其作为引用传递。但是,这是正确的、公认的做法吗
我能想到的唯一选择是设计一个新类,它将
finalQ
和factor
作为字段,但看起来不必要地复杂。这不是通过引用传递的。在传递给它的函数中创建了一个新对象。finalQ
的值只能为空。如果要更改值或使finalQ
全局化,则需要返回该对象。这不是按引用传递。在传递给它的函数中创建了一个新对象。finalQ
的值只能为空。如果要更改值或使finalQ
全局化,则需要返回该对象。在java中没有称为按引用传递的东西,这是一个令人困惑的术语
将对象传递给另一个函数时,传递的是引用的值。在该方法中,创建引用的本地副本并指向相同的内存地址。因此,通常如果您传递非空变量并在单独的方法中修改它,原始对象也会发生更改,因为原始对象和方法本地副本指向相同的内存地址,但是,如果将新实例分配给方法local copy,则对本地副本的后续更改与原始副本无关
在您的例子中,我猜您在CalculateActor中为finalQ分配了一个非空实例,这使得finalQ的本地副本指向另一个内存地址,并保留原始finalQ
因此,如果您想修改传递到方法中的对象,您只能更改它本身,而不能用另一个引用指定它。如果最初传入的对象为null,并且您希望对原始对象进行更改,则必须将更改后的对象返回。在java中没有所谓的通过引用传递,这是一个令人困惑的术语 将对象传递给另一个函数时,传递的是引用的值。在该方法中,创建引用的本地副本并指向相同的内存地址。因此,通常如果您传递非空变量并在单独的方法中修改它,原始对象也会发生更改,因为原始对象和方法本地副本指向相同的内存地址,但是,如果将新实例分配给方法local copy,则对本地副本的后续更改与原始副本无关 在您的例子中,我猜您在CalculateActor中为finalQ分配了一个非空实例,这使得finalQ的本地副本指向另一个内存地址,并保留原始finalQ
因此,如果您想修改传递到方法中的对象,您只能更改它本身,而不能用另一个引用指定它。如果最初传入的对象为null,并且您希望对原始对象进行更改,则必须将更改后的对象返回。
finalQ
是一个按值传递到calculateFactor
的引用,它不是一个引用,而是一个传递的对象。在函数calculateFactor()
中创建了一个类型为Integer
的新对象。@Aashray不是真的。复制的是引用,而不是对象。@Aashray对了,我忘了Java中没有任何东西是通过引用传递的。检查此项。finalQ
是一个通过值传递到calculateFactor
的引用,它不是引用,而是传递的对象。在函数calculateFactor()
中创建了一个类型为Integer
的新对象。@Aashray不是真的。复制的是引用,而不是对象。@Aashray对了,我忘了Java中没有任何东西是通过引用传递的。看看这个。