此处为此代码
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;
}
这两个构造函数初始化之间的区别是什么? 哪种方法是首选? 它在内存分配方面有何变化?
答案 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中,就构造者而言,存在使用第二种方法的惯例,因为它比第一种方法更具可读性且不易出错。
内存分配也没有区别,因为字节代码完全相同。