Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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
&引用;这";vs普通初始化java_Java - Fatal编程技术网

&引用;这";vs普通初始化java

&引用;这";vs普通初始化java,java,Java,我是java的初学者,已经慢慢开始了解这种语言 我很难理解“这个”变量 例如,哪个更好。。为什么 public class Foo{ int a; public Foo(int _a){ a = _a; } } vs 谢谢就语言而言,两者都不是“更好”,它们完全相同 但是,有一个很好的理由选择第二个选项,那就是代码更明确地说明了您正在做什么。就语言而言,这两个选项都不是“更好”,它们完全相同 但是,有一个很好的理由选择第二个选项,那就是代码对您正在做的事情更加

我是java的初学者,已经慢慢开始了解这种语言

我很难理解“这个”变量

例如,哪个更好。。为什么

  public class Foo{
   int a;
   public Foo(int _a){
   a = _a;
     }
 }
vs

谢谢

就语言而言,两者都不是“更好”,它们完全相同

但是,有一个很好的理由选择第二个选项,那就是代码更明确地说明了您正在做什么。

就语言而言,这两个选项都不是“更好”,它们完全相同


但是,有一个很好的理由选择第二个选项,那就是代码对您正在做的事情更加明确。

哪一个更好是主观的。我更喜欢显式命名
this.a
(尽管我的变量会更具描述性),因为它清楚地表明您所指的内容属于当前对象


否则,你必须去别处确认。例如,它可以是在该点和函数开始之间的任意位置创建的局部变量。

哪个更好是主观因素。我更喜欢显式命名
this.a
(尽管我的变量会更具描述性),因为它清楚地表明您所指的内容属于当前对象


否则,你必须去别处确认。例如,它可能是在该点和函数开始之间的任意位置创建的局部变量。

就我个人而言,我讨厌那些使用下划线或“m_”来区分变量的约定。这就是IDE想要阐明的内容

您可以使用
来清楚地描述属于当前实例的变量

你的两个例子都没有任何优势。您可以通过查看生成的字节码来证明这一点。如果您使用javap,您将看到这两种语言编译成相同的代码

在我看来,它更多地与你自己和其他程序员的可读性有关。好的IDE,比如IntelliJ,使用高亮显示和颜色编码使其更加清晰

绝对需要它的一种情况是,方法参数和私有成员之间存在名称冲突。然后您必须使用
this
来消除编译器的歧义:

public class Foo {
    private int x;
    public void setX(int x) {
        this.x = x;  // this is required here.
    }
}

就我个人而言,我讨厌那些使用下划线或“m_”来区分变量的约定。这就是IDE想要阐明的内容

您可以使用
来清楚地描述属于当前实例的变量

你的两个例子都没有任何优势。您可以通过查看生成的字节码来证明这一点。如果您使用javap,您将看到这两种语言编译成相同的代码

在我看来,它更多地与你自己和其他程序员的可读性有关。好的IDE,比如IntelliJ,使用高亮显示和颜色编码使其更加清晰

绝对需要它的一种情况是,方法参数和私有成员之间存在名称冲突。然后您必须使用
this
来消除编译器的歧义:

public class Foo {
    private int x;
    public void setX(int x) {
        this.x = x;  // this is required here.
    }
}

从你上面发布的代码来看,没有区别。然而,有时Java的作用域和阴影机制使这成为必要。例如

public class Foo{
   int a;
   public Foo(int _a){
       this.a = _a;
   }
 }
不必要,这是一个

public class Foo{
   int a;
   public Foo(int a){
       this.a = a;
   }
 }
当使用更复杂的变量名而不是像
a
这样的简单变量名时,这有时很有用


对于某些C++类型的调用这可能是一个奇怪的现象->实际上,有些事情与变量的查找方式不同。但是Java回避了所有这些细节。

与您上面发布的代码没有区别。然而,有时Java的作用域和阴影机制使这成为必要。例如

public class Foo{
   int a;
   public Foo(int _a){
       this.a = _a;
   }
 }
不必要,这是一个

public class Foo{
   int a;
   public Foo(int a){
       this.a = a;
   }
 }
当使用更复杂的变量名而不是像
a
这样的简单变量名时,这有时很有用


对于某些C++类型的调用这可能是一个奇怪的现象->实际上,有些事情与变量的查找方式不同。但是Java回避了所有这些细节。

在本例中,它们生成相同的字节码,因此实际上只是选择哪种样式的问题。一般来说,
这个
(严格来说,它不是一个变量)指的是当前指定的类,或者更常见的是指它的一个实例(调用了当前指定方法的实例)。

在这种情况下,它们生成相同的字节码,所以实际上只是选择哪一个的样式问题。一般来说,
这个
(严格来说它不是一个变量)指的是当前指定的类,或者更常见的是指它的一个实例(调用了当前指定方法的实例)。

只要参数和字段名不同,就没有功能上的区别。如果您不使用它,
这个
是隐含的。这有点离题(参见和),从技术上讲可能更合适,因为它肯定与编程有关。然而,它可能是主观的——我说“可能”,因为有一类“主观”问题,答案可以有确凿的理由支持。这一次是否能经受住考验还有待观察——我怀疑不是我自己。函数差异不是唯一的,在代码中使用换行符和不使用换行符之间没有函数差异,但我不想编辑没有换行符的源代码:-)没有函数差异——只要参数和字段名不同。如果你不使用它,
这个
是隐含的。这有点离题(参见和),从技术上来说可能更合适,因为它肯定与p有关