在java中,原语值可以被视为对象吗?

在java中,原语值可以被视为对象吗?,java,object,Java,Object,当我开始使用Java时,我认为我们有两种不同的类型: Objects (strings, from classes, println, etc) primitive values (int, double, char) 我刚从一位教授那里得到一个考试,这个差异意味着两个答案之间的差异。当我请教授澄清时,他告诉我原始值可以是对象 谁在这里,谁能给我任何证据? 证明将是官方的声音,我会选择这作为答案,并奖励你一些众所周知的互联网。原语不是对象。也就是说,int不是整数 但是,对于任何模糊的最新Ja

当我开始使用Java时,我认为我们有两种不同的类型:

Objects (strings, from classes, println, etc)
primitive values (int, double, char)
我刚从一位教授那里得到一个考试,这个差异意味着两个答案之间的差异。当我请教授澄清时,他告诉我原始值可以是对象

谁在这里,谁能给我任何证据?
证明将是官方的声音,我会选择这作为答案,并奖励你一些众所周知的互联网。

原语不是对象。也就是说,
int
不是
整数

但是,对于任何模糊的最新Java编译器,原语可以作为关联的对象类型(
int
autoboxes as
Integer
)和(
Integer
unboxes as
int
),与原语相关的对象类型的实例(
Integer
Long
)是不可变的(这对于表现得像原始人一样很重要),因此区别变得模糊。这可能就是教授所指的


也就是说,一个接受
int
的方法(例如)可以被赋予一个
整数
,编译器只处理对它的解装箱;类似地,一个接受
对象的方法
(我想到了映射)可以接受一个原语,编译器将其装箱到相应的对象类型中。

原语和对象之间存在隐式映射,因此可以在需要整数的地方使用
int
。这是一种称为自动装箱的功能

例如:

Integer foo = 4; // 4 is really an int
此外,原语与对象有一些共同点。它们有一个
,例如
int.Class

还应注意,所有数组都是对象

然而,对象与原语的概念是Java中最糟糕的事情之一。许多现代语言之间根本没有太大区别,甚至没有任何原语(在Java中,您也可以做任何事情,而不必显式使用原语)

基本值可以被视为对象吗

答案是否定的

美国

Java编程语言中有两种类型:基本类型(§4.2)和引用类型(§4.3)。相应地,有两种数据值可以存储在变量中,作为参数传递,由方法返回,并对其进行操作:基本值(§4.2)和引用值(§4.3)

那些是

由Java编程语言预定义,并通过其保留关键字命名

哪一个可能是其中之一

类类型(§8)、接口类型(§9)、类型变量(§4.4)和数组类型(§10)

还请注意,有一种特殊类型是
空类型
及其对应值
空引用

还有一种特殊的null类型,表达式null的类型(§3.10.7,§15.8.1),它没有名称

null引用是null类型表达式的唯一可能值

对于基本类型,JLS定义了一种机制,用于将它们转换为相应的引用类型

装箱转换将基元类型的表达式转换为引用类型的相应表达式


因此,由于需要从基元类型转换为相应的引用类型,因此不能说基元可以被视为对象,反之亦然。但可以说它们是可转换的。

正确的术语是基元类型和引用类型。然后研究装箱转换。基元值可以“装箱”或“取消装箱”到引用类型中或从引用类型中取出,这有时是自动完成的。
float
boolean
也是基本类型,它们的“装箱”版本是
Float
Boolean
。确切的问题是什么?是的,这是什么学校?从技术上讲,这是编译器的问题,而不是JVM的问题。我不能这么说,我不想惹麻烦。但如果我是对的,我的gpa会得到提升。@munchshare公平。在java 10上,据说他们会删除primi侦探。@SotiriosDelimanolis:这个公式确实很笨拙。我会重新制定。现在,这是一个正确的答案。你今天有我所有的互联网。@Munchscheal,谢谢,希望这足以证明你的证据:双关语警报:MFW是一个好学生,看到教授错过的细节对我不利。@Munchscheal heh,希望你的教授很好修正后,祝你好运!更新;他不这么认为。le叹气;他说他指的对象和数组中的对象一样。但他在测试中给了我分数;他只是不记得是什么。