指针如何与 Java 中的原始类型一起工作?
Posted
技术标签:
【中文标题】指针如何与 Java 中的原始类型一起工作?【英文标题】:How do pointers work with primitive types in Java? 【发布时间】:2015-07-03 11:58:19 【问题描述】:我正在阅读What is a NullPointerException, and how do I fix it?,在接受的答案中,我读到了一些我不太明白的内容:
int x; x = 10;
在这个例子中,变量 x 是一个 int,Java 将初始化它 为你为 0。当您在第二行将其分配给 10 时,您的值 10被写入x指向的内存位置。
我认为对于原始类型,变量是实际值的内存地址;至于复杂类型,变量只是指向实际值的指针的内存地址。但是上面引用的答案告诉我我错了。它说“x 指向的内存位置”。
那么如果 x 指向一个存储实际值的内存地址,那么原始类型与复杂类型有何不同?我不知道原始类型甚至有指针。指针如何与原始类型一起工作?
【问题讨论】:
不是引用到内存位置吗? @KickButtowski 对于复杂类型,是的。我没有得到的是 x 指向的东西,这是一个原始类型。 当你说指向时,它让我想起了 c 和 c++ 中的指针,而我们在 Java 中没有这样的东西。 我认为你应该看看 reference 和 pointer 之间的区别。谷歌它 @KickButtowski 谢谢!我将尝试浏览所有 C++ 参考和指针材料,并寻找 Java 特定的东西。 【参考方案1】:原始类型和复杂类型的主要区别在于数据的存储方式。您实际上是在查看原始类型和 类类型
之间的区别1.每个变量都作为一个位置存储在计算机内存中。
上述语句既适用于原始类型,也适用于类 类型。
区别:
2.对于原始类型:变量的值存储在分配给变量的内存位置。
这意味着如果我们分配
int x = 10
,x
的值存储在10
的值存储在哪里,即内存位置。这意味着 当我们“看”x 时,'10' 存储在那里。也许这会有所帮助 把它想象成你命令 x 成为的“任务” 等于 10。3.对于类类型:它只存储存储值的对象的内存地址。它不直接持有 对象本身。
整数 x = 10 将有一个指向对象的内存地址 输入 int,它将保存 10 的值。这被称为 参考。把它想象成一个目录,告诉你去哪个架子去实际检索值。
还有
类类型也称为引用类型或对象类型,即它们都表示类的对象(无论是 Integer 类还是 MyPerson 类)。
原始类型不是引用类型,因为它们不包含引用(内存地址)。
这种区别是日常使用“包装类”的原因,Integer
等类型被视为int
的包装类,以允许进行数据操作,例如将整数存储在数据结构中,例如作为一个数组列表。因为ints
是原始数据类型,不是object
,而Integer
是。由于原始类型不是对象,我们必须将它们放入一个类中以便我们将它们添加到列表、字典等中。这样我们就有了一个对象列表(它指向原始types),但它们本身并不是裸原始数据类型。见this SO question for further info
关于原始和非原始(又名类/引用/对象类型)之间差异的附加阅读详细信息here。他们也有一个很好的图表来说明它。
【讨论】:
我稍微改变了你的格式,所以它很容易阅读。希望你没事。我也已经加了一个你 难道只是我对“x 指向的内存位置”的措辞感到困惑吗?他们并不是要暗示 x 的内存位置指向任何地方……他们只是说 x? @KickButtowski 刚刚看到了这一点。我绝对没问题。谢谢!我添加了一些信息,所以我反映了您的编辑。请相应地编辑! @Evorlor 准确地说。如果您从使用指针的编程语言(例如基于 C 的语言)的角度来考虑它,区别在于原始类型只是 int x,而类类型将是具有指向的指针(内存地址)的类诠释 x。如果这是有道理的...我给出的链接写得更透彻,并且比我尝试的更详细地解释了它。以上是关于指针如何与 Java 中的原始类型一起工作?的主要内容,如果未能解决你的问题,请参考以下文章