[英]Does an implicit typecast in Java have an effect on the order of operations?
我的代碼中有一個片段,其中一個看起來應該評估為“false”的語句實際上返回了 true。
long composite = -1L;
ArrayList<Long> primes = new ArrayList<Long>();
ArrayList<Long> squares = new ArrayList<Long>();
squares.add(1L);
primes.add(2L);
primes.add(3L);
for (long i = 4; composite == -1L; i++) {
double sqrt_max = Math.sqrt((double) i);
if (sqrt_max == (int) sqrt_max) squares.add(i);
if (i % 2 == 0) continue;
boolean prime = true;
for (int j = 0; primes.get(j) <= sqrt_max; j++) {
if (i % primes.get(j) == 0) {// number is not prime
prime = false;
break;
}
}
if (prime) { // number is prime
primes.add(i);
}
else {
boolean conjTrue = false;
for (Long l : primes) {
ListIterator<Long> it = squares.listIterator(squares.size() - 1);
while (it.hasPrevious()) {
long m = it.previous();
if (l + 2L * m == i) {
conjTrue = true;
break;
}
else if (l + 2L * m < i) break;
}
if (conjTrue) break;
}
if (!conjTrue) composite = i;
}
}
System.out.println("\nAnswer: " + composite);
就目前來看,這段代碼工作正常(我調試完了),但是我發現了一個無法解釋的問題,我想學習一下。
關系語句else if (l + 2L * m < i)
,當變量計算為(19 + 2 * 9 < 27)
-> (38 < 27)
(顯然是 false)時,如果代碼為else if (l + 2 * m < i)
,則計算結果為true
else if (l + 2 * m < i)
。 請注意,2L 已替換為 2 (int)。 我什至在else if
之后直接使用了 print 語句來測試boolean
l + 2 * m < i
的值並且會得到true
。
else if
條件括號和隱式類型轉換導致關系錯誤地評估為true
。 在其他情況下,它會正確計算。 什么可能導致這個問題?
為了簡化你的問題,
看來你是在暗示
Long l = 19L;
Long m = 9L;
long i = 27;
System.out.println(l + 2L * m < i);
會打印真。
output
false
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.