【问题标题】:How's it possible to assign variable where expression needed in java?java - 如何在java中需要表达式的地方分配变量?
【发布时间】:2020-09-24 16:34:19
【问题描述】:

我搜索了表达式和语句的区别,出现了一个问题。

在 C 或 java 中,我可以像这样在 if 语句中分配变量。

int a;
// someFunc returns an integer value
if ((a=someFunc()) == 1) {
    // do something
}

相反,python 不允许这样做。

if (a = someFunc() is 1):
    # do something

当然,在 PEP 572 之后,在 python 3.8 之后我可以使用它, 但应该使用:= 符号。

然而,a=someFunc() 不是表达式,而是执行后不返回任何内容的语句。对吗?
所以,python的解释代码的方式看起来是合理的,而java的则不然

但是,如何在 java 或 C 中解释这种代码方式?为什么允许?

【问题讨论】:

  • 1 是指true吗?
  • 好吧,我不明白你的意思。该java代码将被解释为if ( a == 1),如果a为1则为真,否则为假。

标签: java python


【解决方案1】:

我会尝试以你的例子来解释这一点:

int a;
if((a = someFunc()) == 0) {
    //do something here
}

这里遵循以下顺序:

  1. someFunc() 方法被调用,该方法在执行后预计会根据我们声明的变量返回一些整数值。
  2. 从方法返回值后,它被存储在变量 a 中。
  3. 现在括号内的整个语句被视为变量 a 内的值,即 (a = someFunc()) 变为 a,它又是一个整数通过调用someFunc()方法返回值。
  4. 现在该值与 0 进行比较,并相应地验证 if 语句。

【讨论】:

  • 谢谢,但还是听不懂。你说(a=someFunc()) becomes a。但是,我想知道“a=someFunc() 是不是表达式的语句,所以它会被消耗并且什么都不返回,但它怎么能保留下来”。这是一个微不足道的问题,但让我感到困惑。
  • 让我们这样理解,在java中当你写int a = someFunc();然后发生的是someFunc()返回值并存储在a中。现在,当语句终止时,它给出的最终值是 a 中存在的值。这不仅限于 if 语句,您也可以在 print 语句中尝试。
  • 例如:int a; System.out.println(a = 5); 这将在控制台中打印 5。因此,当语句终止时会发生什么,存储在变量引用的内存中的最后一个值保留在那里。同样的,当我们写if((a == someFunc()) == 0),所以在第一个括号的末尾,内存中变量a引用的值被保留,然后用于与0进行比较。
猜你喜欢
  • 1970-01-01
  • 2020-12-21
  • 1970-01-01
  • 1970-01-01
  • 2015-08-12
  • 1970-01-01
  • 2012-06-27
  • 2016-04-30
  • 1970-01-01
相关资源
最近更新 更多