請在這裏說明一下發生了什麼:在printf運算符重載中使用%嗎?如果不是,那是什麼?
class Test{
public static void main(String[] args){
int a = 43%2;
System.out.printf("The test remainder is %d %s",a,"hello");
}
}
在上面的代碼中,我想知道的是它的%
運營商的operator overloading?
請在這裏說明一下發生了什麼:在printf運算符重載中使用%嗎?如果不是,那是什麼?
class Test{
public static void main(String[] args){
int a = 43%2;
System.out.printf("The test remainder is %d %s",a,"hello");
}
}
在上面的代碼中,我想知道的是它的%
運營商的operator overloading?
沒有。目前Java對運算符重載的支持非常有限,而這不是其中的一種情況。
在string literal中的%
由執行java.util.Formatter
處理。 String#format
和PrintWriter#printf
將格式化工作委託給Formatter
,手動解析字符串。
%有價值的唯一原因是由於Formatter
如何處理字符串。
如果你查看代碼,你會發現:
if (conversion == '%' || conversion == 'n')
隨後是處理不同類型的switch語句。
看起來像%
在String
的使用感到困惑。
Java中的""
之間的任何內容都不是運算符。所以,當你有一個像
43 % 2
的%
代碼是一個操作符,但是當你有一個像String
的"asdf%asdf%++*adsf"
%
+
和*
不是運營商。另外Java沒有運算符重載。
printf
函數使用%
來標記稍後將傳遞給它的變量的位置,它可能是任何其他符號,並且與運算符重載無關。
你問關於'int a = 43%2;'還是在格式化字符串中使用'%'? –
Java目前不支持運算符重載。唯一的內置運算符重載是針對數值和「字符串」值。 –
而我更換或從字符串中刪除%,輸出未顯示。如果更改%d%s的順序,則拋出異常。爲什麼? –