下面的代码打印出“ 3”,而不是您期望的“ 4”。
public class Foo2 {
public static void main(String[] args) {
int a=1, b=2;
a = b + a++;
System.out.println(a);
}
}
我懂 后缀增量发生在加载“ a”的值之后。(见下文)。
我不太明白是为什么。后缀++的运算符优先级高于+,因此它不应该首先执行吗?
% javap -c Foo2
Compiled from "Foo2.java"
public class Foo2 extends java.lang.Object{
public Foo2();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: iconst_1
1: istore_1
2: iconst_2
3: istore_2
4: iload_2
5: iload_1
6: iinc 1, 1
9: iadd
10: istore_1
11: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
14: iload_1
15: invokevirtual #3; //Method java/io/PrintStream.println:(I)V
18: return
Postfix ++
递增变量的值,并 返回递增之前的值 。因此,operator++
在您的示例中,返回值将为1
,当然1 + 2
将为3
,然后将其赋给a
。在分配时,++
已经将a
to 的值增加了2
(由于优先),因此将=
覆盖该增加的值。
问题内容: 我正在处理由以前的开发人员编写的代码,并在查询中说: 这个查询是什么意思?等于吗?还是语法错误? 但是它没有显示任何错误或异常。我已经知道= 在MySQL的。 问题答案: TL; DR 这是安全的相等运算符。 像常规运算符一样,将两个值进行比较,结果为(不相等)或(相等);换句话说:yields 和yields 。 与常规运算符不同,of的值没有特殊含义,因此它永远不会产生可能的结果。
所有的数学运算都认为是从左向右运算的, Java 语言中大部分运算符也是从左向右结合的,只有单目运算符、赋值运算符和三目运算符例外,其中,单目运算符、赋值运算符和三目运算符是从右向左结合的,也就是从右向左运算。 乘法和加法是两个可结合的运算,也就是说,这两个运算符左右两边的操作数可以互换位置而不会影响结果。运算符有不同的优先级,所谓优先级就是在表达式运算中的运算顺序。 一般而言,单目运算符优先级较
问题内容: 由于Java中运算符优先级的正确性,我感到困惑。我在教程很久以前读到并具有更高的优先级高于OR,这是在提供的答案确认问题。但是,我目前正在使用《 Sun Java 6认证程序员学习指南》学习Java。本书包含以下示例: 我复制并引用了有关编译器如何处理上述代码的解释: 是,然后是或结果 为,然后打印。由于存在短路,因此对表达式进行评估,好像周围有括号。换句话说,它被评估为之前的单个表达
问题内容: 在Java教程优先级表中,plus运算符的优先级仅列出一次。但是以下Java表达式: 结果如下: 这是否意味着加号运算符在用于连接字符串时具有较高的优先级,或者是说加号运算符的优先级对于字符串和数字没有什么不同,只是简单地从左到右求值? 问题答案: 总是 从左到右 流动 __ 在您的第一个示例中,string首先出现,然后是int值,因此1被视为string。 在第二个示例中,您使用的
在下面的代码示例中,做什么:
从高到低顺序如下: ^ not - (一元运算) * / + - ..(字符串连接) < > <= >= ~= == and or