2017-08-06 52 views
0

請在這裏說明一下發生了什麼:在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

+0

你問關於'int a = 43%2;'還是在格式化字符串中使用'%'? –

+0

Java目前不支持運算符重載。唯一的內置運算符重載是針對數值和「字符串」值。 –

+0

而我更換或從字符串中刪除%,輸出未顯示。如果更改%d%s的順序,則拋出異常。爲什麼? –

回答

1

沒有。目前Java對運算符重載的支持非常有限,而這不是其中的一種情況。

string literal中的%由執行java.util.Formatter處理。 String#formatPrintWriter#printf將格式化工作委託給Formatter,手動解析字符串。

%有價值的唯一原因是由於Formatter如何處理字符串。

如果你查看代碼,你會發現:

if (conversion == '%' || conversion == 'n') 

隨後是處理不同類型的switch語句。

1

看起來像%String的使用感到困惑。

Java中的""之間的任何內容都不是運算符。所以,當你有一個像
43 % 2%代碼是一個操作符,但是當你有一個像String"asdf%asdf%++*adsf"%+*不是運營商。另外Java沒有運算符重載。

printf函數使用%來標記稍後將傳遞給它的變量的位置,它可能是任何其他符號,並且與運算符重載無關。

相關問題