2017-08-06 25 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函数使用%来标记稍后将传递给它的变量的位置,它可能是任何其他符号,并且与运算符重载无关。

相关问题