请在这里说明一下发生了什么:在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的顺序,则抛出异常。为什么? –