Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java和C的区别++;复制构造函数 我很好奇java是如何支持复制构造函数的,C++又是如何与C++不同的呢?我想从编译器的角度理解Java等价于执行规则3(复制构造函数、析构函数、赋值运算符)的逻辑。_Java_C++_Copy Constructor - Fatal编程技术网

Java和C的区别++;复制构造函数 我很好奇java是如何支持复制构造函数的,C++又是如何与C++不同的呢?我想从编译器的角度理解Java等价于执行规则3(复制构造函数、析构函数、赋值运算符)的逻辑。

Java和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;

Java对复制构造函数没有特定的语言支持。相反,您只需在构造函数中手工编写状态复制代码;e、 g

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-此外,在某些应用程序中,
对象的名称可能需要更改@对不起,这是定稿