我正在阅读一些Java文本并获得以下代码:
int[] a = {4,4};
int b = 1;
a[b] = b = 0;
Run Code Online (Sandbox Code Playgroud)
在文中,作者没有给出明确的解释,最后一行的效果是: a[1] = 0;
我不太清楚我理解:评估是如何发生的?
我正在将进程移植到Java.已经有了C#和C++的工作版本.
我在C#中有一个部分,我使用Marshal.Copy(...)将64个字节转换为512个字节,并在C++中使用memmove(...)来执行相同的操作.Java中有哪些可以实现相同的结果?我需要相同顺序的二进制信息,就像字节而不是long一样.
编辑:
我移植到Java的原因是利用Java自然具有的可移植性.我不想使用本机代码.
另一件事.由于Java不包含无符号值,因此我需要稍微更改我正在请求的内容.我想从64个long(C#和C++中的ulongs)中的每一个获得8个无符号字节值,以便稍后我可以在数组中的索引处使用这些值.这需要发生数千次,因此最快的方式将是最好的方式.
如果我有一行类似的代码
int s = (double) t/2
Run Code Online (Sandbox Code Playgroud)
它是一样的吗?
int s = (double) (t/2)
Run Code Online (Sandbox Code Playgroud)
要么
int s = ((double) t)/2
Run Code Online (Sandbox Code Playgroud)
?
给定一个f1() + f2()*f3()带有3个方法调用的表达式,java首先计算加法运算(的操作数):
int result = f1() + f2()*f3();
f1 working
f2 working
f3 working
Run Code Online (Sandbox Code Playgroud)
我(错误地)期望f2()首先被呼叫,然后被呼叫f3(),最后被呼叫f1()。因为乘法应在加法之前求值。
所以,我在这里不了解JLS-我想念什么?
15.7.3。评估尊重括号和优先权
Java编程语言遵守 由括号显式表示和由运算符优先级隐式表示的评估顺序。
在此示例中,如何精确地遵守运算符优先级?
JLS在15.7.5中提到了一些例外。其他表达式(方法调用表达式(§15.12.4),方法引用表达式(§15.13.3))的评估顺序,但是我不能将这些异常中的任何一个应用于我的示例。
我知道JLS保证二进制运算的操作数从左到右求值。但是在我的示例中,为了了解方法调用顺序,有必要了解首先考虑哪个操作(及其两个操作数!)。我在这里错了-为什么?
更多示例:
int result = f1() + f2()*f3() + f4() + f5()*f6() + (f7()+f8());
Run Code Online (Sandbox Code Playgroud)
自豪地生产:
f1 working
f2 working
f3 working
f4 working …Run Code Online (Sandbox Code Playgroud) java evaluation expression-evaluation operator-precedence jls
我无法理解为什么跟随if块执行.如何评估if条件?
public class Test
{
public static void main(String[] args)
{
if (true || (false || true) && false)
{
System.out.println("How does this condition becomes true.");
}
if (false && (false || true) || true)
{
System.out.println("Same with this condition, why is it true.");
}
}
}
Run Code Online (Sandbox Code Playgroud) 我NullPointerException有时会从下面的线上得到.
System.out.println("Date::"+ row != null ? row.getLegMaturityDate() : "null");
Run Code Online (Sandbox Code Playgroud)
添加括号后,它很好.
System.out.println("Date::"+ (row != null ? row.getLegMaturityDate() : "null"));
Run Code Online (Sandbox Code Playgroud)
请澄清我的行为.提前致谢.
在http://leepoint.net/notes-java/data/expressions/precedence.html的一个例子中
以下表达式
1 + 2 - 3 * 4 / 5
Run Code Online (Sandbox Code Playgroud)
被评估为
1 + 2 - 3 * 4 / 5
= (1 + 2) - ((3 * 4) / 5)
= 3 - (12/5)
= 3 - 2 The result of the integer division, 12/5, is 2 .
= 1
Run Code Online (Sandbox Code Playgroud)
然后我从http://www.roseindia.net/java/master-java/operator-precedence.shtml中看到了另一个例子
以下表达式
4 + 5 * 6 / 3
Run Code Online (Sandbox Code Playgroud)
被评估为
4 + (5 * (6 / 3))
Run Code Online (Sandbox Code Playgroud)
我有点困惑的是如何确定哪些将在*和/涉及时首先进行评估.在上面的例子中,两者似乎都不同.
第一个例子是评估3*5/5,((3*4)/5)
而第二个例子是评估5*6/3 as …
快问.在Java中,AND优先于OR吗?例如,这段代码是如何解释的?
if(statement1 && statement2 || statement3)
Run Code Online (Sandbox Code Playgroud)
这是一样的吗?
if(statement1 && (statement2 || statement3))
Run Code Online (Sandbox Code Playgroud)
要么
if((statement1 && statement2) || statement3)
Run Code Online (Sandbox Code Playgroud)
提前致谢.
java ×8
casting ×1
conditional ×1
evaluation ×1
if-statement ×1
jls ×1
operators ×1
porting ×1
scjp ×1