原始类型变量是否算作java中的对象?例如,
中的variable1
int variable1=10;
算作一个对象?或者variable1
只是对象的引用?
我认为variable1
是c ++中的一个对象。这是对的吗?
答案 0 :(得分:3)
c ++和Java中单词object的一般含义是相同的。简而言之,对象既可以具有状态,也可以具有转换和检查或利用该状态的操作。这两种语言都是如此。在这两种特定语言中同样存在的另一件事是,对象是"类"的特定实例,它描述了对象具有的特征(其支持的接口),以及可能的操作和访问和维护状态(其实施")。一个有用的类比是,一个对象就像一个房子,由蓝图(该类)构建。
简短回答:对于Java,没有。对于c ++,是的。
<强>爪哇强>
Primitive types不计入Java中的对象。这是非常明确的,因为原始类型不从超类Object
继承(每个对象都是一个特殊的类)。
Java中的原始类型和对象类型之间存在其他差异,即原始类型是&#34;通过值&#34; (意思是当你将它们传递给方法或将它们分配给变量时,会产生数据的副本),而对象是通过引用传递的,#34;这意味着当你将它们传递给方法或将它们分配给变量时,你得到引用的副本到数据(从一个引用的状态操作改变其他引用看到的状态)。由于像int
这样的原始类型是按值传递的,我们也可以告诉它们它们不是对象。
<强> C ++ 强>
可以使原始类型不是c ++中的对象的一个论点是原始类型不是任何类的实例。但是,c ++ 11提供了一个方便的判断来检查给定类型是否是对象类型std::is_object
。对于像int这样的原始类型,这会返回true
,这可能会使辩论结束。
截至2014年的official working draft of the standard for c++包含以下文字:
对象是存储区域......对象由定义, new-expression 创建,或由需要时实施。
(第1.8节。删除了内部参考资料)
因此对于c ++,任何占用内存并由上述机制之一创建的数据都算作对象。这将包括基本类型,如int
,因为基元类型的实例占用内存并由上述机制之一创建(int variable1 = 2;
计为定义定义在规范的第3.1节中。
C ++值/参考/地址 您还询问了您的变量是否是c ++中的引用。 C ++没有相同的&#34;所有对象都通过引用传递&#34; Java的规则。 C ++实际上使您可以灵活地决定如何移动数据并对其进行引用。您可以通过引用传递(类似于Java),值(复制所有数据)或地址/指针(类似于引用,因为您可以使用多个指针来操纵单个对象的数据,但具有一些额外的自由/职责)。请参阅this description of reference/value/pointer。
在int variable1=10;
的特定示例中,variable1
按价值而不是引用或地址持有10
。
Java中的许多内容都围绕着数据作为对象的概念(例如:如果它是一个对象,你只能将项目放入java.util.List
)。因此,将原始类型视为对象有时会很有用。出于这个原因(并提供一些与基本类型相关的有用实用程序),Java语言为所有允许您将它们用作对象的基元类型提供包装类。
请参阅: Byte,Short, Integer,Long,Float,Double,Character和Boolean。
答案 1 :(得分:1)
variable1不是Java中的对象 - 它只是原始类型,并保存您在内存中分配的实际值。