Tag: 运算符优先级

字符串连接和比较在println语句中给出了意外的结果

我无法弄清楚以下行为, String str1= “abc”; String str2 = “abc”; System.out.println(“str1==str2 “+ str1==str2); System.out.println(“str1==str2 ” + (str1==str2)) 上述声明的输出如下: 假 str1 == str2 true 为什么会这样? 为什么输出不是如下: str1 == str2 true str1 == str2 true

在没有括号的Java中调用新对象的方法:操作违规的顺序?

根据此Java运算符优先级和关联性表 ,成员访问优先级高于new运算符。 但是,给定一个类myClass和一个非静态成员函数myFunction ,以下代码行是有效的: new myClass().myFunction(); 如果. 在new之前评估,这条线怎么能被执行? 换句话说,为什么不需要括号? (new myClass()).myFunction(); 我的猜测是因为()分享优先权. ,首先评估myClass() ,因此编译器甚至在评估new关键字之前就知道调用了带有零参数的myClass构造函数。 但是,这似乎仍然暗示第一行应该与new (myClass().myFunction()); ,情况并非如此。

为什么“或”在“和”之前?

int it=9, at=9; if(it>4 || ++at>10 && it>0) { System.out.print(“stuff”); } System.out.print(at); 打印出stuff9,我想知道为什么我认为++at>10 && it>0将首先进行评估,因此得到= 10。

Java:pre-postfix运算符优先级

关于Java中的运算符优先级,我有两个类似的问题。 第一: int X = 10; System.out.println(X++ * ++X * X++); //it prints 1440 根据Oracle教程 : postfix(expr ++,expr–)运算符的优先级高于prefix(++ expr, – expr) 所以,我想评估顺序: 1) first postfix operator: X++ 1.a) X++ “replaced” by 10 1.b) X incremented by one: 10+1=11 At this step it should look like: System.out.println(10 * ++X * X++), X = 11; 2) second […]

Java中的a + = a ++ * a ++ * a ++。 如何评估?

我在这个网站上遇到过这个问题,并在Eclipse中尝试过,但无法理解它们的评估方式。 int x = 3, y = 7, z = 4; x += x++ * x++ * x++; // gives x = 63 System.out.println(x); y = y * y++; System.out.println(y); // gives y = 49 z = z++ + z; System.out.println(z); // gives z = 9 根据网站上的评论,x + = x ++ * x ++ * […]