我是个初学者,我想知道以下几点。
假设我有一个类foo
并创建了一个对象foo first
并将一些数据放入其中:
foo first = new foo();
first.data="mydata";
然后我想创建另一个对象foo second
,并使其具有与first
相同的内容(但不是相同的内存位置)。我能做到以下几点吗?
foo second = new foo();
second = first;
或者这只是将第一个
和第二个
设置为相同的内存地址,而我只是在内存中的单个对象上有效地获得了两个句柄?
我读过关于克隆物体的书,它看起来太复杂了。我觉得自从我在foo second=new foo()中定义了一个新的
打算复制整个内容,而不仅仅指向第一个。是这样吗?foo
之后
second=first
所以我的问题是:为什么不是这样?在上面的逻辑中,编译器设置成这样有什么缺陷?
最好的方法是使用复制构造函数。
当你看到关于clone()
的讨论时,请注意这是非常有争议和不鼓励的(如果你想知道原因,请谷歌)。明显的例外是:数组!
复制构造函数的工作原理如下:
Foo first = new Foo();
first.data="mydata";
Foo second = new Foo(first);
在接受另一个Foo的Foo构造函数中,只要复制字段,如果字段是复杂对象,也可以使用它们的复制构造函数。
问题内容: 看来在PHP对象中是通过引用传递的。甚至赋值运算符似乎也没有创建对象的副本。 这是一个简单的人为证明: 在这两种印刷情况下,我都会得到“之后”的印象 那么,如何通过值而不是通过引用将 $ a 传递给 set_b() ? 问题答案: 在PHP 5+中,对象是通过引用传递的。在PHP 4中,它们是按值传递的(这就是为什么它具有运行时按引用传递(已弃用)的原因)。 您可以在PHP5中使用“克
问题内容: 我需要弄清楚如何创建一个临时日历对象(已经存在的“永久”日历的副本),以便可以操纵该副本:tempCal.add(单位,值)。我需要保持原始日历对象不变,所以我真的不想直接在其上调用add(unit,value)。 由于我创建副本的尝试均无济于事,因此,我目前的丑陋方法是调用永久性Cal.add(单位,值),显示所需的结果,然后调用永久性Cal.add(单位,-值),这似乎是,不酷。
主要内容:显式创建对象,隐含创建对象对象是对类的实例化。对象具有状态和行为,变量用来表明对象的状态,方法表明对象所具有的行为。 Java 对象的生命周期包括创建、使用和清除,本文详细介绍对象的创建,在 Java 语言中创建对象分显式创建与隐含创建两种情况。 显式创建对象 对象的显式创建方式有 4 种。 1. 使用 new 关键字创建对象 这是常用的创建对象的方法,语法格式如下: 2. 调用 java.lang.Class 或者 ja
7.2.2 对象的创建 一旦定义了类,就可以创建类的实例,也就是该类的一个对象②。类是抽象的,而对象 则是具体的,就好比“人”是抽象概念,而“张三”是个具体的人。一个类可以创建任意多 个实例(对象),所有实例都具有相同的行为(这是由类中定义的方法决定的),但各自的数 据值可以不同。创建类的实例采用如下形式: <变量> = <类名>(<参数>) 这里将类名当成一个函数来用,称为类的构造器(cons
我有一个数组,我需要用map函数循环,并像
问题内容: 我想在数组中的每个索引处创建一个大小相同的数组。用Java做到这一点的最佳方法是什么? 例如,如果为5且值为boolean ,则数组应为: 问题答案: 您可以尝试以下方法: 手动数组填充的第二种方法: