我正在阅读What is a NullPointerException, and how do I fix it?,在接受的答案中,我读到了一些我不太了解的内容:
int x; x = 10;
在此示例中,变量x是一个int,Java将对其进行初始化 给你0。当您在第二行中将其分配给10时,您的值 10写入x指向的存储单元。
我认为对于原始类型,变量是实际值的内存地址;对于复杂类型,变量只是指向实际值的指针的内存地址。但上面引用的答案告诉我,我错了。它说“x指向的内存位置。”
因此,如果x指向存储实际值的内存地址,那么原始类型与复杂类型的不同之处是什么?我不知道原始类型甚至有指针。指针如何与原始类型一起使用?
答案 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
,而Integer
是ng-options
。由于原始类型不是对象,我们必须将它们放入一个类中,以便我们将它们添加到Lists,Dictionaries等。这样我们就有了一个对象列表(指向原语)类型)但它们本身不是一个裸的原始数据类型。见this SO question for further info
关于原语和非原语(又称类/引用/对象类型)之间差异的附加读物详细here。他们有一个漂亮的图表来说明它。