java中这两个构造函数之间有什么区别? (记忆)

时间:2014-03-21 11:26:22

标签: java this

此处为此代码

public class Base {
    int length, breadth, height;

    Base(int l, int b, int h) {
        length = l;
        breadth = b;
        height = h;
    }
}

Base(int l, int b, int h) {
    this.length = l;
    this.breadth = b;
    this.height = h;
}

这两个构造函数初始化之间的区别是什么? 哪种方法是首选? 它在内存分配方面有何变化?

4 个答案:

答案 0 :(得分:8)

没有区别。在第一个构造函数中,您只需省略this,而在第二个构造函数中您明确指定它。生成的字节码完全相同(您可以检查)。如果您想要放置或不放置,只是样式问题,除非该字段与参数具有相同的名称,在这种情况下this是强制性的,以避免歧义,例如:

Base(int length,int breadth,int height) {
   this.length = length;
   this.breadth = breadth;
   this.height = height;
}

(请明智地使用空格,它会使您的代码更具可读性。)

答案 1 :(得分:0)

他们是一样的。
如果你这样写会有所不同:

Base(int length, int breadth, int height)
{
   this.length=length;
   this.breadth=breadth;
   this.height=height;
}

因为有两个变量名为length等。

答案 2 :(得分:0)

两者都是一样的。在第一种情况下,编译器将在编译时隐式添加this关键字。

唯一的区别是秒似乎更具可读性。它可以轻松区分成员变量和本地变量。通常this在局部变量遮蔽它们时引用成员变量很方便。

答案 3 :(得分:0)

没有区别,因为this被隐式添加到第一个构造函数中。在Java中,就构造者而言,存在使用第二种方法的惯例,因为它比第一种方法更具可读性且不易出错。

内存分配也没有区别,因为字节代码完全相同。