Java 在方法或构造函数中使用此关键字时,此关键字位于=符号的左侧或右侧是否重要

Java 在方法或构造函数中使用此关键字时,此关键字位于=符号的左侧或右侧是否重要,java,this,Java,This,我是Java新手,正在尝试学习这个关键字的概念。我的问题是,当在方法或构造函数中使用此关键字时,此关键字位于=符号的左侧或右侧是否重要 class Point { public int x = 0; public int y = 0; public Point(int x, int y) { x = this.x;//this on right hand side of = this.y = y;//this on left hand

我是Java新手,正在尝试学习这个关键字的概念。我的问题是,当在方法或构造函数中使用此关键字时,此关键字位于=符号的左侧或右侧是否重要

class Point {

    public int x = 0;
    public int y = 0;

    public Point(int x, int y) {
        x = this.x;//this on right hand side of =
        this.y = y;//this on left hand side of =
    }
}

this.x
x
不同,因为
this.x
是类的全局
x
变量,而
x
引用方法/构造函数中的变量,在本例中,它是参数


这意味着您必须将全局变量
This.x
设置为
x

,这确实很重要。在Java中,左边的变量接收右边变量的值

在你的例子中:

class Point {

    public int x = 0; // line 1
    public int y = 0; // line 2

    public Point(int x, int y) { // line 3
        x = this.x; // line 4
        this.y = y; // line 5
    }
}
x=this.x
的意思是“从第1行获取x的值,并将该值放入第3行的x中。因此,这里传入(第3行)以创建对象的参数x现在将设置为0(因为这是在第1行创建的)。这可能不是您想要的

this.y=y
的意思是“从传入的y参数(第3行)中获取值,并将该值放入第2行创建的y中。因此,传入的参数y将覆盖第2行上实例化y变量的0

记住这一点的一个技巧是,我在大学里学到了
=
想象成一个总是指向左边/接收器的箭头

因此,你有:


是的,这很重要
x=this.x
在此上下文中不会执行任何操作。您是否尝试运行代码并查看发生了什么?通过运行程序并打印出值很容易找到它。如果您没有与对象变量(x)同名的参数,您可以通过将其引用为x来使用属于Point的全局x变量,但由于您有一个名为x的参数,在该方法中引用x将引用该参数。因此,您使用这个.x来引用objects变量。(局部变量总是胜过同名的类成员;
这个
用于显式指示类成员。)Java中没有全局变量。字段是全局变量的永久替代项。@chrylis啊,我指的是类变量。谢谢。@ChaiTeaNunes这是一个实例变量,不是类变量(类变量用关键字
static
标记)。非常感谢您的回答!它比我所希望的更详细!真的很感激!