Java 作业是参考的吗?

Java 作业是参考的吗?,java,c++,variable-assignment,Java,C++,Variable Assignment,在java中,如果您这样做 Myobj one = new Myobj(); Myobj two = one; 然后一个和两个指向同一个对象 在C++中,如果我做了: Myobj one = new Myobj(); Myobj *two = &one; 这与java示例基本相同吗?其中修改一个或两个将影响两个对象?这两个对象使一个和两个基本相同: Myobj *one = new Myobj(); Myobj *two = one; //one and two are the sa

在java中,如果您这样做

Myobj one = new Myobj();
Myobj two = one;
然后一个和两个指向同一个对象

在C++中,如果我做了:

Myobj one = new Myobj();
Myobj *two = &one;

这与java示例基本相同吗?其中修改
一个
两个
将影响两个对象?

这两个对象使一个和两个基本相同:

Myobj *one = new Myobj();
Myobj *two = one;
//one and two are the same thing, pointer's to a Myobj

Myobj one;
Myobj *two = &one;
//one is an object that will be deallocated at end of current scope
//two is a pointer to one

< > > C++ <代码>新MyObjor(<)>代码>在堆上创建<代码> Myobj <代码>并返回指向它的指针。< /P>
Myobj *one; //Creates a variable that should point to a Myobj instance
Myobj two = new Myobj(); //Doesn't really work
*two = &one; //Get where two point's at and assign the location of one to it

更新:

Myobj one = new Myobj(); //This doesn't quite work, assigning pointer to class
Myobj *two = &one; //This works, you make a pointer to point to one
要修复第一条语句,可以使用:

Myobj one = Myobj();
//Myobj one(); //This requires the constructor to take arguments, thanks juanchopanza!
Myobj one{}; //Requires C++11, courtesy juanchopanza
Myobj one;
所有人都做同样的事情


一般情况下,应复印以下文件:

Myobj one; //or any variant
Myobj two = one;
或者,如果您更喜欢使用指针:

Myobj *one = new Myobj();
Myobj *two = new Myobj();
*two = *one;

下面的代码与Java相同

Myobj one;
Myobj& two = one;
他们不一样

使用
new
关键字创建的对象即使在本地作用域之后仍然存在。它们被分配到堆中的存储。它们返回一个引用,因此需要一个指针来存储引用值

创建的对象

新建
关键字遵循复制语义。如果你有

Object obj1=Object()
Object obj2=obj1;
将创建两个对象。也就是说,obj1的特性值将复制到obj2

如果不想创建新对象,则应使用指针

例:

下面的语句说明了cpp注释中的变量
&
在声明中,一旦赋值,它就不能映射到任何其他对象。所以它与
Java
引用的关系不是太近

Object& ref2=obj1;      
这里obj1的生存期在局部作用域之后结束

当您在cpp中声明like Object obj时,实际上是在为一个对象分配空间,而不仅仅是在
Java
中创建引用。在
CPP
中,指针最接近java中所称的引用

 Object *obj=new Object();
上面的语句在内存中而不是堆栈中创建对象。在您使用
delete
操作符释放内存或关闭应用程序之前,它具有使用寿命


Java
中,所有对象仅在堆中创建。

下面的代码使一个和两个对象指向同一位置,即更改其中一个将同时更改它们

yobj *one = new Myobj();
Myobj *two = one;
如果你想让两个成为一个的副本

Myobj *one = new Myobj();
Myobj *two = new Myobj();
*two = *one;

不,这无法编译:
two
应该声明
Myobj*
,然后只执行
one=two。你也可以在C++中使用引用。@ QueDaviWr.Engult我实际上不想要<代码>一= 2 但是当我初始化<代码> 2<代码>时,我希望它是一个拷贝<代码>一个/代码>。然后我可以稍后编辑两个。我做得对吗?@user1008134 one当前是指向nothing@user1008134您的代码甚至无法编译。你给一个对象分配了一个指针(第二行),然后甚至给一个被取消引用的对象分配了一个指针的地址(该对象不存在,你只能取消引用一个指针)。@Winestone纠正了它,我打错了。对不起,我问这个问题很糟糕,但是,在不使用相同变量的情况下,将
one
复制到
two
中的正确方法是什么呢?请澄清,您的最后两个代码片段创建了两个单独的对象,每个对象的内容相同,但修改其中一个不会影响另一个对象?
Myobj one()是一个函数声明。顺便说一句,你可以说
Myobj one{}(除非使用C++11之前的编译器。)
Myobj *one = new Myobj();
Myobj *two = new Myobj();
*two = *one;