Java中的隐式转换

class A { 

public static void main(String args[]) {

String.format("%c",2);

}

}

上面的程序编译正常,但它如何将整型赋值给char。它不应该给有损的转换编译错误?Java中的隐式转换

class A { 

public static void main(String args[]) {

String.format("%d",45.67);

}

}

这不会导致编译错误,但它会导致编译错误,因为我们如何为int分配一个double值。而是它给运行时错误?

请帮我从解决这个

回答:

答:Can the char type be categorized as an integer?

是,一个char是所有在它出现的流行语言整型。 “积分”意味着它的频谱是离散的,任何两个不同值之间的最小差值是1.与其他积分类型相比,所需的支持值范围通常很小。计算机硬件传统上将整数视为基本数据类型;相比之下,算术浮点类型是更新和更复杂的加法。

希望这个解释可以帮助你了解多一点关于基本类型。

回答:

String.format只是消耗String实例作为第一个参数的标准方法。

Java不编译字符串文字的内容。开发人员有责任提供正确的模式。

String.format文件说:

抛出: java.util.IllegalFormatException - 如果格式字符串包含非法语法,格式说明符与给定参数不兼容,论据不足给出的格式字符串或其他非法条件。

更新#1

注:Java使用整数的字符表示。所以第一个例子不会失败。 下面的代码是有效的在Java中:

char c = 1; 

int i = 'o';

更新#2

根据the documentationchar有最小值0和65535包容性的最大值。这就是为什么你不能把65537分配给字符。 在另一方面65537是在String.formatc转换有效参数。

参见the documentation:

字符 - 可以被施加到其代表的Unicode字符基本类型:字符,字符,字节,字节,短,且短。这种转换也可以应用于字符时的int和Integer类型。isValidCodePoint(int)返回true

回答:

format的签名为公开static String format(String format, Object... args)。所以这个方法在第一个参数之后会接受任何参数(它必须是String)。 Java不会导致complile错误,因为它必须在运行时首先解析format。例如,您可以通过传递true作为参数来检查它。

String.format("%d", true); //still compiles 

String.format("%d", new StringBuilder()); //also still compiles

如果参数是那么java.util.IllegalFormatException非法将在运行时抛出。

回答:

你可能想看看有关人士透露,具体为:

java.util.Formatter.format(Locale l, String format, Object ... args) 

你能想到的String.format(它调用Formatter.format)作为一个小的框架,从而根据Objects s到在format字符串编码指令

以上是 Java中的隐式转换 的全部内容, 来源链接: utcz.com/qa/258597.html

回到顶部