java中的指针实际存在吗?

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++中看起来很容易,因为你可以在那里使用指针.所以我想知道的是,这是怎么做到的?这是阳光的优势,还是我在这里完全没有意义?

Chi*_*hii 7

指针存在于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.


jos*_*chi 5

首先,它属于StackOverflow.其次,你想阅读文章Java是Pass-by-Value,Dammit!

  • 实际上确实如此.`sort()`获取对数组的引用的副本.它可以随意重新排列阵列的*内容*(即状态).它*不能*创建一个新的并将其分配给您传递的那个.但这不是这里发生的事情. (5认同)