不与原始类型(
int,
long,
char等)。Java按值传递东西,这意味着函数传递的变量是原始变量的副本,并且您对该副本所做的任何更改都不会影响原始变量。
void swap(int a, int b){ int temp = a; a = b; b = temp; // a and b are copies of the original values. // The changes we made here won't be visible to the caller.}
现在,对象有所不同,因为对象变量的“值”实际上是对对象的引用-复制该引用使其指向完全相同的对象。
class IntHolder { public int value = 0; }void swap(IntHolder a, IntHolder b){ // Although a and b are copies, they are copies *of a reference*. // That means they point at the same object as in the caller, // and changes made to the object will be visible in both places. int temp = a.value; a.value = b.value; b.value = temp;}
局限性在于,您仍然无法以调用者可以看到的任何方式修改
a或
b自身的值(即,不能将它们指向不同的对象)。但是您可以交换它们引用的对象的内容。
顺便说一句,从OOP的角度来看,上述内容相当荒唐。这只是一个例子。不要这样
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)