Jef*_*rne 2 java pointers reference
我觉得我在java方面很有经验,但似乎事实并非如此,我昨天注意到了一些事情,我以前用过的东西,但从未真正意识到它的作用.我用谷歌搜索,但没有找到我的问题的答案.
如果我声明一个int数组,并使用Array的静态排序函数来对我的数组进行排序,我只需要输入
Arrays.sort( numbers );
Run Code Online (Sandbox Code Playgroud)
代替
numbers = Array.sort( numbers );
Run Code Online (Sandbox Code Playgroud)
这在C和C++中看起来很容易,因为你可以在那里使用指针.所以我想知道的是,这是怎么做到的?这是阳光的优势,还是我在这里完全没有意义?
指针存在于java中 - 所有非原始变量都是java中的指针,也就是引用.
它们不支持与C tho中的指针相同的操作集 - 它们对语言的用户基本上是不透明的.
之所以Arrays.sort(array)
有效,是因为它array
是一个"指针",它允许sort()
函数访问array
变量所指向的内存位置.
现在,为什么不:
void swap (Integer a, Integer b) {
Integer tmp = a;
a = b;
b = tmp;
}
Run Code Online (Sandbox Code Playgroud)
如果你这样做的话
Integer x = 1;
Integer y = 2;
swap(x,y);
Run Code Online (Sandbox Code Playgroud)
因为java传递值(这是一个与指针不同的概念).1
给出指针swap()
,而不是变量的值x
(它是内存地址或指针).因此,操纵参数swap()
不会影响变量x
.
首先,它属于StackOverflow.其次,你想阅读文章Java是Pass-by-Value,Dammit!