当前位置: 首页 > 知识库问答 >
问题:

为什么我们可以在Java的括号里赋值?[关闭]

盖向荣
2023-03-14

我在看Tomcat的Java源代码,发现了这样的代码

String a = ("aa");
int b = (1);

它编译成功,而通常赋值应该是

String a = "a";
int b = 1;

为什么第一段代码编译成功?

共有1个答案

孙志
2023-03-14

从语法上讲,这些不是赋值:它们是带有初始化器的变量声明。(这并不是很重要,不过,这是()的区别)。

带有初始值设定项的变量声明的(简化)形式是:

Type name = expression;

任何兼容类型的表达式都可以出现在等号的右侧。

()创建一个带括号的表达式。根据语言规范:

带圆括号的表达式是一个主表达式,其类型是所包含表达式的类型,其在运行时的值是所包含表达式的值。

因此,它的值与括号中的值相同。

在这种情况下,没有任何理由使用(),但它们不会改变代码的含义。

 类似资料:
  • 我们知道我们可以将null赋给可为null的类型。例如: 我们知道第二种说法是有效的,因为有人告诉我们它是有效的,我们只是接受它,而不问为什么。但如果查看的源代码,则为: 我们可以将赋给为的原因是由于隐式运算符,它允许您隐式强制转换int为。根据隐式运算符的规则,作为的右手边,必须是结构类型,但显然不是合法的结构值,那么如何做(更不用说本身就是一个结构),为什么不违反隐式运算符规则

  • 问题内容: 我经常看到这样的代码(C,C ++,有时甚至是Java): 我看不到这些括号有任何好处。所以我的问题是,程序员是否假定函数是某种以返回值作为参数的函数,或者确实有这些括号有意义的情况吗? 我了解这里已经提出了类似的问题,但这仅与ANSI C有关。我想知道是否存在某些特定于C ++或Java的方面尚未得到解答。 问题答案: 关于C 括号放在有表达式的位置,并且希望返回值是表达式的值。 即

  • 我正在阅读Avalonia的源代码,我遇到了这样一句话: 我从没见过这样的语法。如果没有索引属性或这个[]访问器,这些括号会做什么?,如果他们所指的财产不是布尔,为什么要用感叹号来否定呢?,也许是某种空检查? 代码本身包含在以下cs文件中: https://github.com/AvaloniaUI/Avalonia/blob/master/src/Avalonia.Controls/Flyout

  • 问题内容: 我想在Java MessageFormat中输出一些花括号。例如,我知道以下内容不起作用: 有没有一种方法可以逃避“ return {2}”周围的花括号? 问题答案: 您可以将它们放在单引号内,例如 有关更多详细信息,请参见此处。

  • 问题内容: 运行此命令时: 响应为: 这对我来说真是太棒了。我本以为这会带来编译时错误。 为什么我可以在Java中抛出null,为什么将其转换为NullPointerException? (实际上,鉴于我抛出的是null,因此我不知道这是否是“ upcast”) 除了一个非常愚蠢的面试问题(请没人在面试中问这个问题)之外,我看不到任何理由。也许您想被解雇,但这就是…我的意思是,为什么还会有人呢?

  • 问题内容: 我已经搜索过了,但是找不到答案,无论出于什么原因,我都感到羞耻,无法问教授,因为那种感觉当成千上万的人盯着你看时… 无论如何,我的问题是使用括号的重要性是什么?如果我省略它们可以吗?例: 与 我知道它们都可以使用,但是如果省略括号(由于能见度,我倾向于做很多事情)会改变任何东西吗?正如我说的,我知道它有效,我测试了数十次,但是现在我的一些单项作业越来越大,出于某种原因,我出于非理性的恐