class A {
public static void main(String args[]) {
String.format("%c",2);
}
}
以上程序编译正常,但它如何将整数赋值给char。它不应该给有损转换编译错误吗?
class A {
public static void main(String args[]) {
String.format("%d",45.67);
}
}
这不会导致编译错误,但它应该导致编译错误,因为我们如何为int分配double值。而是给它运行时错误?
请帮我解决此问题
答案 0 :(得分:4)
String.format
只是一个标准方法,它使用String
实例作为第一个参数。
Java不编译字符串文字的内容。开发人员有责任提供正确的模式。
String.format
文档说:
抛出: java.util.IllegalFormatException - 如果格式字符串包含非法语法,格式说明符与给定参数不兼容,给定格式字符串的参数不足或其他非法条件。
更新#1
注意:Java使用整数表示char表示。所以第一个例子不会失败。 以下代码在Java中有效:
char c = 1;
int i = 'o';
更新#2
根据the documentation char
,最小值为0,最大值为65535(含)。这就是为什么你不能将65537分配给char。
另一方面,65537是c
中String.format
转换的有效参数。
字符 - 可以应用于表示Unicode字符的基本类型:char,Character,byte,Byte,short和Short。当Character.isValidCodePoint(int)返回true时,此转换也可以应用于int和Integer类型
答案 1 :(得分:1)
回答: Can the char type be categorized as an integer?
是的,char是所有流行语言中不可或缺的类型。 “积分”表示其频谱是离散的,任何两个不同值之间的最小差异是1.与其他积分类型相比,所需的支持值范围通常非常小。计算机硬件传统上将整数视为基本数据类型;相比之下,算术浮点类型是一种更新,更复杂的添加。
希望这个解释可以帮助您更多地了解原始类型。
答案 2 :(得分:0)
您可能需要查看来源,特别是:
java.util.Formatter.format(Locale l, String format, Object ... args)
您可以将String.format
(调用Formatter.format
)视为根据Objects
字符串
format
的小框架