当前位置: 首页 > 面试题库 >

为什么在Java中不允许分配给'this'?

郎志
2023-03-14
问题内容

我从编译器收到的错误是“分配的左侧必须是变量”。我的用例是深度复制,但并没有实际意义。

在C ++中,可以分配给*this

问题不在于如何规避对的分配this。这很简单,但是决定不进行this变量的背后是什么原理。

原因是技术上的还是概念上的?

到目前为止,我的猜测-用随机方法重建对象的可能性容易出错(概念上),但在技术上是可行的。

编辑 请避免使用“因为Java规范这么说”的变体。我想知道 这个决定原因


问题答案:

在C ++中,可以分配给*this

是的,但是您不能this = something使用C 进行操作,我实际上认为C 与您在Java方面提出的要求更接近。

[…]决定不进行this变数的依据是什么?

我会说清楚/可读性。

this被选择为保留字,可能是因为它没有作为显式参数传递给方法。将其用作普通参数并能够为其重新分配新值将严重破坏可读性。

实际上,很多人认为,出于这个原因,您根本不应该更改参数变量。

原因是技术上的还是概念上的?

我想主要是概念上的。但是会出现一些技术上的怪癖。例如,如果您可以将值重新分配给this,则可以将实例变量完全隐藏在局部变量后面。

到目前为止,我的猜测-用随机方法重建对象的可能性容易出错(概念上),但在技术上是可行的。

我不确定我是否完全理解此语句,但是是的,容易出错是决定将其设为关键字而不是变量的主要原因。



 类似资料:
  • 问题内容: AsicII表:http://www.asciitable.com 下面的代码打印出相应字符的Dec值,例如“ 123”-> 49 50 51 但是我注意到java是一种强类型语言,这意味着必须在编译时进行所有转换,但是代码如何知道如何以及何时将char转换为AsicII表中正确的Dec值呢?我弄乱了任何Java /编程基础知识吗? 问题答案: A 只是一个无符号的16位数字,因此,由

  • 问题内容: 我读了这个问题,并认为如果可以写的话,很容易解决(不是没有它就不能解决): 我不确定在很多情况下它是否有用,但是我想知道为什么它没有用,以及其他语言中是否存在类似的东西。 你们有什么感想? 编辑: 澄清一下:是的,我知道,这在Java中是不可能的,我也不是很想念它。这不是我期望的工作,并且惊讶于出现编译器错误。我只是有这个主意,喜欢讨论它。 问题答案: 它违反了封装。你不应该能够绕过父

  • 问题内容: 通常,Java可被视为类型安全的语言。我知道泛型有一些缺陷,但是最近我遇到了一个从未有过的问题。分解: 不会导致预期的编译时错误。我假设Array的声明将不允许指向其他数组。在泛型中,我不允许做类似以下这样的怪异的事情: 如果我尝试诱使Java做一些事情 可以声明它,但只能添加type的对象。 Java为什么不阻止声明这种奇怪的数组? 问题答案: 我认为除了“传统设计”之外,没有其他答

  • 这个问题看起来像是重复的,但实际上不是。只是一个不断重复的微小差异。git一直告诉我:“请告诉我你是谁”,即使在设置之后。当我运行时,这就是我得到的…… 但是当我运行时,它会给我所有的详细信息… 我已经更改了我的姓名、电子邮件和代理,但当我运行命令时,它们看起来很好,即使在.gitconfig文件中,我也可以看到设置的值。可能缺少什么,因为我根本无法promise。每次它总是问我是谁? @sheu

  • 问题内容: 我知道Java和C#中不允许多重继承。许多书只是说,不允许多重继承。但是可以通过使用接口来实现。没有任何关于为什么不允许它的讨论。谁能确切告诉我为什么不允许这样做? 问题答案: 简短的答案是:因为语言设计师决定不这样做。 基本上,.NET和Java设计器似乎都不允许多重继承,因为他们认为添加MI会增加语言的复杂性,而带来的好处却很少。 要获得更有趣和深入的阅读,Web上提供了一些文章,

  • 问题内容: 我想知道为什么它是Java不允许超负荷使用,虽然他们都以不同的方式使用? 使用方式如下: 而另一种形式: 使用方式如下: 这背后有什么原因吗? 问题答案: 这个15.12.2.5选择最具体的方法对此进行了讨论,但是它相当复杂。例如,在Foo(数字…整数)和Foo(整数…整数)之间进行选择 为了向后兼容,这些实际上是同一件事。 例如,您可以将main()定义为 一种使它们与众不同的方法是