为什么total_amount
和tax_amount
作为字符串连接在一起而不是在下面的println
语句中作为数字加在一起?
public class Test{
int total_amount,tax_amount;
public void cal(int total_amount,int tax_amount)
{
System.out.println("Total amount : "+total_amount+tax_amount);
}
public static void main(String[] args) {
new Test().cal(100, 20);
}
}
Output Total amount : 10020
Expected Total amount : 120
答案 0 :(得分:16)
那是因为运营商的优先权。基本上,您的代码与以下内容相同:
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);
作为旁注,我建议:
underscores_separating_words
,例如taxAmount
代替tax_amount
total_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
代表价格。)
答案 1 :(得分:3)
Java假定您希望将值连接为字符串。您可以使用括号来阻止这种情况:
System.out.println("Total amount : "+ (total_amount + tax_amount));
添加括号会在连接加法结果和"Total amount :"
字符串之前添加两个值。
答案 2 :(得分:2)
这样做
System.out.println("Total amount : "+total_amount+tax_amount);
与打印相同
字符串文字后面的 total_amount 和 tax_amount 的串联总金额:
因此没有进行数学运算
total_amount保持值100和 tax_amount 20因此输出 10020
改为
System.out.println("Total amount : " + (total_amount + tax_amount));