Java中有"this"这个名字吗?

Jay*_*Jay 26 java field this instance variable-assignment

Eclipse会给出一个错误,"赋值的左侧必须是变量",当我尝试类似的东西时:

public class Thing{

  String a1;
  int a2;

  public void meth(){
    Thing A = new Thing();
    this = A;
  }
}
Run Code Online (Sandbox Code Playgroud)

我不得不将每个变量(this.a1 = A.a1; this.a2 = A.a2;)分配为一种解决方法.

是否有其他方法可以在不通过每个变量字段的情况下执行此操作
如果this不是变量,它叫什么?

Ósc*_*pez 71

this是一个伪变量,指向对象的当前实例,它不能被重新分配.它也被认为在语言中的关键字,按段§3.9中的Java语言规范.

  • 它不是一个"伪变量",它是一个`关键字`,被视为`表达式s/a(1 + 2).并且(1 + 2)= A没有意义.请参阅下面的答案 (7认同)

NPE*_*NPE 24

不,没有简单的捷径.

如果"this"不是变量,它叫什么?

this它不是变量,而是关键字.

虽然this很特别,但在许多方面它都像一个参考.因此,为了保持一致性,this = A必须是参考分配,这没有多大意义.

你似乎在期待this = A从执行现场逐场拷贝Athis,确实Java的设计者可以选择做,在这种情况下.但是,这与其他参考作业不一致,将此作为例外的总体好处并不清楚.

  • 答案似乎很好. (4认同)

Jak*_*yer 10

thisthis的是类的实例.

你不能分配给 this


Per*_*ror 9

是一个java保留关键字,它引用当前对象.它不是一个变量,它是一个java保留关键字.所以this = A;无效.使用this关键字我们可以引用当前对象的任何实例变量或方法.你必须引用实例变量,如:

this.a1 = A.a1;
Run Code Online (Sandbox Code Playgroud)

来自Doc:

使用this关键字的最常见原因是因为字段被方法或构造函数参数遮蔽.


cHa*_*Hao 6

您无法this在Java中分配.这不是变数; 这是一个关键字.

如果您不需要特定实例,您可能会考虑的一件事就是使用return新实例.

public class Thing{

  String a1;
  int a2;

  public Thing meth(){
    Thing A = new Thing();
    return A;
  }
}
Run Code Online (Sandbox Code Playgroud)

而且你会喜欢它

whatever = whatever.meth();
Run Code Online (Sandbox Code Playgroud)


jer*_*mel 5

根据java lang spec §15.8.3 this是一个关键字,它是一个表达式语句

  1. 当用作主表达式时, this表示一个值,该值是对其调用实例方法的对象的引用。
    • 表达式:评估为值的东西。示例:x++
  2. 关键字 this 也用在特殊的显式构造函数调用语句中
    • 语句:控制程序执行的句法元素,它们的执行是为了它们的效果并且没有值示例:if (true)

在任何一种情况下,它都不是变量

  • 变量:具有关联类型的存储位置

在您的情况下this表达式而不是变量。但出于所有目的,只需将其称为关键字

  • 关键字:由 ASCII 字母组成的字符序列,保留用于……不能用作变量名