Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中打印变量的地址_Java_Collections_Linked List - Fatal编程技术网

如何在Java中打印变量的地址

如何在Java中打印变量的地址,java,collections,linked-list,Java,Collections,Linked List,作为C中变量(即int a)的地址,可通过和获得 如何在Java中实现这一点?例如,链表的元素是不连续的。如何打印使用集合框架创建的链表中元素的地址 如果上述情况不可能实现,我们如何证明数组的元素是连续的,而链表的元素不是连续的?在Java中,不可能获得任何基本变量或对象的地址。您所能做的就是使用System.identityHashCode(a)获取默认的对象哈希代码(通常与它的地址相关,但不能保证)。JVM隐藏的所有内容,您永远不必担心它。 即使你能得到它,你也不能用它做任何事…… 相反,

作为C中变量(即int a)的地址,可通过
获得

如何在Java中实现这一点?例如,链表的元素是不连续的。如何打印使用集合框架创建的链表中元素的地址


如果上述情况不可能实现,我们如何证明数组的元素是连续的,而链表的元素不是连续的?

在Java中,不可能获得任何基本变量或对象的地址。您所能做的就是使用
System.identityHashCode(a)

获取默认的对象哈希代码(通常与它的地址相关,但不能保证)。JVM隐藏的所有内容,您永远不必担心它。
即使你能得到它,你也不能用它做任何事……


相反,您可以通过其他方式识别对象,通常是通过实现其equals()和hashCode()方法。

java语言中没有任何元素允许您获取任何内容的地址,更重要的是,没有任何语言元素需要任何内容的地址。这就是为什么java中没有运算符的地址。整个语言的设计都是为了在没有语言的情况下工作

用java抽象了内存地址的整体概念;你能得到的最接近的是一个参考,但这仅限于实际对象。虽然引用的值实际上是一个内存地址(或者至少是一些容易转换为内存地址的内容,请参见压缩OOPS),但无法将该值转换为其他内容。再说一次,除了满足你的好奇心,没有必要这样做


但是,通过使用(注意:不可移植,不适用于实际公共用途!)java.sun.misc.Unsafe,此类允许将引用的值转换为long(表示内存地址)。可以在这里找到使用它的示例:。

此数据取自JAVA文档>

与ARRAYLIST一起使用时,此add()功能 公共布尔加法(E) 将指定的元素追加到此列表的末尾。 指定人: 外接程序接口集合 指定人: 外接程序接口列表 覆盖: 外接程序类抽象列表

与LINKEDLIST一起使用时,此add()功能

公共布尔加法(E) 将指定的元素追加到此列表的末尾。 此方法相当于addLast(E)。 指定人: 外接程序接口集合 指定人: 外接程序接口Deque 指定人: 外接程序接口列表 指定人: 外接程序接口队列

在这两种情况下,您可以看到add()的工作方式不同。 在ARRAYLIST中,它只使用列表和集合接口

但在LINKEDLIST中,使用DEQUE和QUEUE接口意味着java实际上在内部创建一个节点,并以非连续方式插入它


希望您能得到答案。

这在Java中没有意义,因为垃圾收集器可以移动对象。