Class Example{
static void go(int a)
{
System.out.println(a);
}
public static void main(String[] args) {
go('c'); //prints 99
}
}
但是,如果我将方法更改为静态void go(byte),则会给出错误:示例类型中的方法go(byte)不适用于参数(char)。
答案 0 :(得分:1)
由于扩展转换或隐式广告而导致
如果将较窄(较小尺寸)数据类型的值转换为值 更广泛(更大尺寸)的数据类型而不会丢失信息 称为扩展转换。这是由JVM和。隐式完成的 也称为隐式铸造。例如,整数数据类型是 直接转换为双。
示例强>
int a = 100;
double b = a;
System.out.println(b);
以上示例integer (4 Byte)
已转换为double (8 Byte)
在以下情况下允许扩展转换:
现在来
但是,如果我将方法改为static void go(byte),则给出错误: 方法go(byte)中的类型示例不适用于 arguments(char)。
这是由于缩小转化率
如果将更宽(更大尺寸)数据类型的值转换为值 较窄(较小的)数据类型,可能导致丢失 信息,称为缩小转换。这没用 由JVM隐式地并且需要显式转换。例如 double数据类型显式转换为整数
由于字符是16 bits
,而字节是8 bits
所以你必须明确地这样投射:
char c='c';
byte b=(byte)c;
go(b);
答案 1 :(得分:0)
隐式类型转换仅允许扩展而非缩小。 int可以隐式地类型转换为long,但是反转是不可能的。因为你使用了显式类型转换。
答案 2 :(得分:0)
int可以适合32位,而char只能是16位。它被隐式转换为int而不会失去任何准确性。
但是,一个字节只能容纳8位,因此您需要明确说明要将其转换为(byte)c
。但是,更大的char值可能会降低到更小的值。