Java和C的区别++;复制构造函数 我很好奇java是如何支持复制构造函数的,C++又是如何与C++不同的呢?我想从编译器的角度理解Java等价于执行规则3(复制构造函数、析构函数、赋值运算符)的逻辑。
Java对复制构造函数没有特定的语言支持。相反,您只需在构造函数中手工编写状态复制代码;e、 gJava和C的区别++;复制构造函数 我很好奇java是如何支持复制构造函数的,C++又是如何与C++不同的呢?我想从编译器的角度理解Java等价于执行规则3(复制构造函数、析构函数、赋值运算符)的逻辑。,java,c++,copy-constructor,Java,C++,Copy Constructor,Java对复制构造函数没有特定的语言支持。相反,您只需在构造函数中手工编写状态复制代码;e、 g public class Person { private String firstName; private String lastName; public Person(Person other) { this.firstName = other.firstName; this.lastName = other.lastName;
public class Person {
private String firstName;
private String lastName;
public Person(Person other) {
this.firstName = other.firstName;
this.lastName = other.lastName;
}
...
}
我想从编译器的角度理解Java等价于执行规则3(复制构造函数、析构函数、赋值运算符)的逻辑 复制构造函数如上所述。实际上只是一个(简单的)设计模式
java不提供与C++赋值操作符加载等价的内容。java支持对基元类型和引用类型的赋值,但不以C++的方式分配对象。在Java中赋值时需要特殊操作,这是不寻常的。在需要这样做的情况下,通常将逻辑放入setter方法中
java支持<代码>最终实现< /COD>方法,在某些方面与C++析构函数相似。主要区别在于,finalize
方法是对对象而不是引用变量的操作,通常在对象的最后一次引用超出范围后很长时间调用它们
但是,您很少需要使用finalize
方法:
- Java是一种完全垃圾收集的语言,内存管理的最佳策略就是让GC来处理它
- 其他资源最好使用“try/finally”或“try with resources”进行管理
好吧,
finalize
方法唯一合理的用例是清理意外丢失的资源;e、 因为有人忘记使用推荐的机制“关闭”它们。Java只引用对象。不能声明内联(在堆栈或对象中)对象
复制构造函数
Java没有。你可以写一个,但很少这样做
,析构函数
Java没有。它有finalize()
,但这是非常不鼓励的
赋值运算符
java没有对象,只有对象引用。< /p>不,java支持类的引用,而C++支持值和引用,所以java不支持复制cter、dor或赋值。ops@Kal错。Java很好地支持复制构造函数,大多数集合类都提供它们。@chrylis:自动复制构造函数?我不这么认为。@HovercraftFullOfEels内置支持,不支持,但是语言允许这个习语没有任何问题。复制通常是针对可变的“值”对象完成的——例如可变的矩形(如果您需要/想要这样的类)。对于“身份”对象/实体(如Person)来说,它可能不太明智/有用。此代码片段是正确的想法,但如果它能够进行一些深层复制操作,则会更具启发性,而这正是手动复制构造函数的目的。字符串和本机标量太简单了。@ThomasW-这是一个演示Java如何工作的快速示例。。。不是从领域的角度来看有意义的东西。请专注于答案想要表达的内容。@BuzzMoschetti-手动构建器的目的是实现设计者想要实现的任何功能!没有根本理由将复制构造函数限制为深度复制、浅层复制、完整复制或部分复制…@ThomasW-此外,在某些应用程序中,
人
对象的名称可能需要更改@对不起,这是定稿