在c++;java的意思是一样的吗?
在java中,基元类型变量是否算作对象?例如,在c++;java的意思是一样的吗?,java,c++,Java,C++,在java中,基元类型变量是否算作对象?例如,variable1in int variable1=10; 算作一个对象?或者variable1只是对对象的引用? 我认为 Valuab1是C++中的一个对象。这是否正确?variable1在Java中不是对象-它只是基本类型,并保存您在内存中分配给它的实际值。什么是对象? < C++和java中的对象对象的一般含义是相同的。简而言之,对象既可以具有状态,也可以具有转换、检查或利用该状态的操作。这在两种语言中都是正确的。在这两种特定语言中,另一件事
variable1
in
int variable1=10;
算作一个对象?或者variable1
只是对对象的引用?
我认为
<强>简短回答< /强>:对于java,C++没有,是的。< /P> Java 在Java中不要算作对象。这是非常明确的,因为基元类型不是从超类
对象
(每个对象都是其实例的特殊类)继承的
Java中的基元类型和对象类型之间还有其他区别,即基元类型是“按值传递”(这意味着当您将它们传递到方法或将它们分配给变量时,会复制它们的数据),而对象是“按引用传递”,这意味着当您将它们传递到方法或将它们分配给变量时,获取对数据的引用的副本(对一个引用的状态的操作会更改其他引用看到的状态)。因为像int
这样的基本类型是通过值传递的,所以我们还可以判断它们不是对象
C++
一个可以让原始类型不是C++对象的论点是,原始类型不是任何类的实例。然而,c++11提供了一个方便的判断来检查给定类型是否为对象类型。对于int这样的基本类型,这将返回true
,这可能结束了争论
截至2014年的报告包括以下内容:
对象是一个存储区域。。。对象由定义、新表达式或实现(如果需要)创建
(第1.8节:删除内部参考)
因此,对于C++,占用内存并由上述机制之一创建的任何数据都作为对象来计数。这将包括诸如
int
之类的基本类型,因为基本类型的实例占用内存,并由上述机制之一创建(int variable1=2;
视为本规范第3.1节中定义的定义)
C++值/引用/地址
您还询问了变量是否是C++中的引用。C++没有java所做的“所有对象都是引用”规则。C++实际上提供了灵活性来决定如何围绕数据和引用进行移动。您可以通过引用(类似于Java)、值(复制所有数据)或地址/指针(类似于引用,您可以使用多个指针操作单个对象的数据,但有一些额外的自由/责任)。看
在int variable1=10的特定示例中代码>,variable1
按值而不是按引用或地址保持10
在Java中封装为对象的基本类型
Java中的许多东西都围绕着数据是对象的概念(例如:如果它是对象,则只能将项放入Java.util.List
)。因此,能够将基本类型视为对象有时会很有用。出于这个原因(为了提供一些与基本类型相关的有用实用程序),Java语言为所有基本类型提供了包装器类,允许您将它们用作对象
见:
,
在Java中,原语不是对象或引用。它们是原语,完全不同于对象。不,不是。它仍然是一个原始数据类型。AFAIK,是的,它是在C++中,而不是在java中。我不同意你关于C++的看法。Kerrek谢谢你的提示。我已经调整了我的答案。C++总是把对象的定义定义为“存储区域”,所以,如果你想迂回定义,它就不同于你从其他语言中所预期的。实际上,在某些上下文中,使用“对象”作为类变量可能更容易。@chris:Meh,那是一堆蠕虫。当我教人们对象的存储时间时,我不想让任何人认为静态向量和静态整数在某种程度上是不同的。我不能说java,但是请不要让C++变得比现在复杂。@ KerrekSB,好的,我会买的。和augray,§1.8[简介对象]/1包含定义。对于该语言的其他版本,您可以参考该标准的其他草案。