c ++和java中的对象是否意味着相同的东西?

时间:2015-05-25 22:06:56

标签: java c++

原始类型变量是否算作java中的对象?例如,

中的variable1
int variable1=10;

算作一个对象?或者variable1只是对象的引用? 我认为variable1是c ++中的一个对象。这是对的吗?

2 个答案:

答案 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中的许多内容都围绕着数据作为对象的概念(例如:如果它是一个对象,你只能将项目放入java.util.List)。因此,将原始类型视为对象有时会很有用。出于这个原因(并提供一些与基本类型相关的有用实用程序),Java语言为所有允许您将它们用作对象的基元类型提供包装类。

请参阅: ByteShortIntegerLongFloatDoubleCharacterBoolean

答案 1 :(得分:1)

variable1不是Java中的对象 - 它只是原始类型,并保存您在内存中分配的实际值。