【问题标题】:Clarification about expressions in Java澄清Java中的表达式
【发布时间】:2020-11-20 05:51:32
【问题描述】:

基于this doc:它说示例cadence = 0是一个表达式,它是int cadence = 0的粗体部分;

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/expressions.html

整个语句怎么不 int cadence = 0;一种表达?整个初始化不会算作一个表达式吗?这就是我当时的想法并在课堂上告诉我的。

另外,“value1 == value2”是如何在语句 System.out.println("value1 == value2"); 中表达的?是因为我们正在评估一个新的字符串文字到一个字符串值吗?这是否意味着像 5、4.5、false 这样的文字本身就是 Java 中的表达式?在这种情况下,单独的字符串文字被视为表达式。

【问题讨论】:

  • 你似乎混淆了表达和陈述。表达式是计算结果为值的任何内容。
  • 是的,所以在这种情况下,如果我做了 int x = 0;整个语句本身不会被视为表达式吗?
  • 没有。 int x = 0; 是语句,但不是表达式。
  • 我明白了。为什么在这种情况下不需要数据类型(int)来表达?是不是因为不需要评估一个值?

标签: java expression


【解决方案1】:

表达式 (JLS §15) 是一些可以评估并产生 的代码。值得注意的表达式是(不完整列表)

  • 文字,例如42"Hello World"
  • 变量,例如primeNumberperson.name
  • 数组访问,例如arr[3]
  • 运算符,例如6 * 7a <= 12i++i = 3! done
  • 方法调用,例如add(4, 6)person.getName()(仅限非 void 方法)
  • 实例创建,例如new Person()

语句是可以在 { } 块 (JLS §14.2) 中执行的一段代码,例如

  • ifswitch (条件)
  • forwhiledo-while (循环)
  • int iString greeting = "Hello" (局部变量声明)
  • returnbreakcontinue
  • trythrow

一些表达式也可以用作语句,被称为“表达式语句”JLS §14.8):

  • 分配,例如i = 3
  • 前/后递增/递减,例如++ii++i----i
  • 方法调用,例如foo.setNum(13)(包括 void 方法)
  • 实例创建,例如new Person()

整个语句int cadence = 0;怎么不是一个表达式?

这是一个局部变量声明语句,带有initializer。只有 initializer,即= 符号和; 之间的部分,是一个表达式

这与cadence = 0 不同,cadence = 0 是一个赋值运算符表达式,需要成为更大语句的一部分。

两者都不同于cadence = 0;(注意分号),这是一个赋值表达式语句


"value1 == value2" 如何是语句System.out.println("value1 == value2"); 中的表达式?是因为我们正在评估一个新的字符串文字到一个字符串值吗?这是否意味着像 54.5false 这样的文字本身就是 Java 中的表达式?在这种情况下,单独的字符串文字被视为表达式。

正确,54.5false"Hello" 等文字都是 表达式

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    • 2012-07-29
    • 2011-04-12
    • 1970-01-01
    相关资源
    最近更新 更多