指针如何与Java中的原始类型一起使用?

时间:2015-04-24 18:30:56

标签: java pointers primitive-types

我正在阅读What is a NullPointerException, and how do I fix it?,在接受的答案中,我读到了一些我不太了解的内容:

int x;
x = 10;
     

在此示例中,变量x是一个int,Java将对其进行初始化   给你0。当您在第二行中将其分配给10时,您的值   10写入x指向的存储单元。

我认为对于原始类型,变量是实际值的内存地址;对于复杂类型,变量只是指向实际值的指针的内存地址。但上面引用的答案告诉我,我错了。它说“x指向的内存位置。”

因此,如果x指向存储实际值的内存地址,那么原始类型与复杂类型的不同之处是什么?我不知道原始类型甚至有指针。指针如何与原始类型一起使用?

1 个答案:

答案 0 :(得分:10)

原始类型和复杂类型主要在于存储数据的方式上彼此不同。您实际上在查看基本类型和类类型

之间的差异
  

1。每个变量都存储在计算机内存中的位置。

     

以上陈述既适用于原始类型,也适用于类   类型。

     

差异:

     

2. 对于基元类型:变量的值存储在分配给变量的内存位置

     

这意味着如果我们分配了int x = 10,则会存储x的值   其中存储10的值,即存储位置。这意味着   当我们“看”x时,'10'存储在那里。也许它会有所帮助   把它想象成一个“赋值”,你命令x为   等于10。

     

3. 对于班级类型:它只存储存储 对象的内存地址。它没有直接持有   对象本身。

     

整数x = 10将有一个指向对象的内存地址   输入int,然后保存值10.这称为a   的参考即可。可以把它想象成一个目录,告诉你去哪个架子实际检索它。

同时

类类型也称为引用类型或对象类型,它们都表示类的对象(无论是Integer类还是MyPerson类)。

原始类型不是引用类型,因为它们不包含引用(内存地址)。

这种区别是日常使用中“包装类”的原因,Integer等类型被视为int的包装类,允许进行数据操作,例如存储整数数据结构,如ArrayList。因为ints原始数据类型不是object,而Integerng-options。由于原始类型不是对象,我们必须将它们放入一个类中,以便我们将它们添加到Lists,Dictionaries等。这样我们就有了一个对象列表(指向原语)类型)但它们本身不是一个裸的原始数据类型。见this SO question for further info

关于原语和非原语(又称类/引用/对象类型)之间差异的附加读物详细here。他们有一个漂亮的图表来说明它。