那是因为操作符的优先权.基本上,您的代码相当于:
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来表示价格.)