这可能是语义的一种情况,但作为一个实际问题,我发现Java绝对有时以传递方式传递,而不是传值。例如:
public String example() {
SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");
String sResult = "Example:";
GregorianCalendar CAL = new GregorianCalendar(2016, 0, 1); //January 1, 2016
sResult += "\nBegin: CAL = " + f.format(CAL.getTime());
passTo(CAL);
sResult += "\nEnd: CAL = " + f.format(CAL.getTime());
return sResult;
}
public void passTo(GregorianCalendar CAL) {
CAL.add(CAL.DAY_OF_YEAR, 56);
}
执行example()将导致:
Example:
Begin: CAL = 2016-01-01
End: CAL = 2016-02-26
显然,passTo方法已将CAL对象作为参数,对其进行操作,并影响example()中包含的原始对象。如果原始对象被改变了,那么怎么会争辩说只传递了一个值呢?
这符合编程中通常理解的传递引用的定义。
答案 0 :(得分:-1)
你有没有检查过其他答案?
无论如何。您按值传递对象的引用。 类似于C传递指针。 复制引用,但由于它引用了内存位置,您仍然可以修改该内存位置上的内容。
将它与原始数据类型(int,boolean等)进行比较,这些数据类型不是对象。