Tag: 指针

如何在Java中实现链接列表?

我试图在Java中实现一个简单的HashTable,它使用链接列表进行冲突解决,这在C中很容易做到,但我不知道如何用Java做,因为你不能使用指针.. 。 首先,我知道这些结构已经用Java实现了,我不打算使用它,只是在这里训练…… 所以我创建了一个元素,它是一个字符串和指向下一个Element的指针: public class Element{ private String s; private Element next; public Element(String s){ this.s = s; this.next = null; } public void setNext(Element e){ this.next = e; } public String getString(){ return this.s; } public Element getNext(){ return this.next; } @Override public String toString() { return “[” + s + “] => […]

如何在JNI中将指针从java传递给C?

我有一个本地方法int sum(int *,int *)如何从java端传递此方法的参数。 编辑:我成功运行的示例方法是double gsl_stats_mean(doubleArray,int,int); 这个方法在GSL中可用,因为我创建了共享对象,并且从java方面我已经发送了所需的参数,并且我得到了double作为返回值。

通过JNI传递C和Java之间的指针

我一直在通过JNI在Java中存储c指针,遵循@tulskiy的建议在这篇文章中通过JNI传递C和Java之间的指针 诀窍是将指针转换为jlong​​。 所以从c我有return (jlong) ptr; 我正在返回一个jlong​​(总是64位),因为我希望我的代码可以在64位和32位系统上运行。 64位计算机上64位指针的内存大小为64,因此在32位计算机上,内存中指针的大小为32位。 问题是在32位机器上我得到一个编译器警告说“从不同大小的指针转换为整数”。 如果我有return (jlong) (int32_t) ptr;警告就会消失return (jlong) (int32_t) ptr; 但是这个代码不适合64位机器。 我希望我的代码编译时没有警告,这样如果有合法的警告,我会看到它。 有人有主意吗? 谢谢,本

Java中是否存在“指针”或“不安全代码”的概念?

昨天我正在参加一家知名欧洲公司的CTO的演讲,直到最近他还不知道java有指针。 在面对他时,他说他绝对相信java中存在指针/不安全代码。

在Java中处理文件指针的有效方法? (使用带文件指针的BufferedReader)

我有一个日志文件,每秒都会更新。 我需要定期读取日志文件,一旦我读取,我需要将文件指针位置存储在我读取的最后一行的末尾,并且在下一次定期读取时我应该从该点开始。 目前,我使用Java中的随机访问文件,并使用getFilePointer()方法获取偏移值,并使用seek()方法转到偏移位置。 但是,我已阅读大多数文章甚至Java doc建议,以使用BufferredReader有效读取文件。 如何使用BufferedReader实现此目的(获取文件指针并移动到最后一行),还是有其他有效的方法来实现此任务?

增加HashMap中的整数

我是否必须返回该对象,然后再添加一个新对象? 或者我可以直接增加? Integer temp = myMap.get(key); temp++; myMap.put(key, temp); 没有办法做到这一点(这不起作用): myMap.get(key)++;

Equated Java Arrays中的奇怪之处:引用与指针

有一个问题,了解下面的代码发生了什么。 数组c和d的行为是我所期望的。 但是a和b什么? (我也尝试使用普通的标量变量,在任何一种情况下都不会发生任何意外。) 输出将复制到RH注释。 import java.util.Arrays; public class ArraysParadox { public static void main(String[] args) { int[] c = {1, 2, 3}; int[] d = {6, 5, 4, 3}; System.out.print(“c: “); System.out.println(Arrays.toString(c)); // c: [1, 2, 3] System.out.print(“d: “); System.out.println(Arrays.toString(d)); // d: [6, 5, 4, 3] System.out.println(“— swap —“); int[] tmp = c; c […]

C ++中的new运算符与java中的new运算符之间的区别

据我所知, new运营商做了以下事情:(如果我错了,请纠正我。) 分配内存,然后返回分配的内存的第一个块的引用。 (很明显,内存是从堆中分配的。) 初始化对象(调用构造函数。) 运算符new[]以类似的方式工作,除了它对数组中的每个元素执行此操作。 任何人都可以告诉我这两个运算符在C ++和Java中有何不同: 就他们的生命周期而言。 如果他们无法分配内存怎么办?

java引用变量存储在哪里?

Java的引用变量是如何存储的? 这是否与C指针类似? 我的意思是引用变量是这段代码中的myDog Dog myDog = new Dog(); 我理解了C指针,它存储在堆中的全局变量,并且它存储在堆栈中的局部变量。 我想知道java工作方式相同。

当Java中没有指针时,为什么Java会出现“NullPointerException”?

为什么我得到一个名为NullPointerException的exception,如果在Java中没有指针这样的概念?