那是因為操作符的優先權.基本上,您的代碼相當于:
System.out.println(("Total amount : " + total_amount) + tax_amount);
是以,當total_amount為100,tax_amount為20時,最終為:
System.out.println(("Total amount : " + 100) + 20);
被評估為:
System.out.println("Total amount : 100" + 20);
被評估為:
System.out.println("Total amount : 10020");
選項:
>使用括号顯示您希望如何對操作進行分組:
System.out.println("Total amount : " + (total_amount + tax_amount));
>首先執行求和,并将其存儲在新變量中:
int totalIncludingTax = total_amount + tax_amount;
System.out.println("Total amount : " + totalIncludingTax);
作為旁注,我建議:
>遵循Java命名約定,使用camelCase而不是underscores_separating_words,例如: taxAmount而不是tax_amount
>更仔細地命名變量 – 有一個名為total_amount的變量然後列印一些不同的标簽總量是很奇怪的
>在這裡使用靜态方法,因為您實際上并未使用對象中的字段. (這些字段令人困惑,因為你沒有使用它們.)
通過代碼格式化,您最終得到:
public class Test {
public static void main(String[] args) {
calculateTotal(100, 20);
}
private static void calculateTotal(int preTaxTotal, int tax) {
int totalIncludingTax = preTaxTotal + tax;
System.out.println("Total amount: " + totalIncludingTax);
}
}
(你還應該考慮你要為非整數價格做什麼……我建議使用整數,但要使用美分/便士/任意數量,或使用BigDeciml來表示價格.)