Java中的隐式转换

时间:2017-12-02 22:21:06

标签: java

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值。而是给它运行时错误?

请帮我解决此问题

3 个答案:

答案 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是cString.format转换的有效参数。

请参阅the documentation

  

字符 - 可以应用于表示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的小框架