为什么我可以将char传递给一个接受int的方法?

时间:2015-02-08 07:05:05

标签: java

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)。

3 个答案:

答案 0 :(得分:1)

由于扩展转换或隐式广告而导致

  

如果将较窄(较小尺寸)数据类型的值转换为值   更广泛(更大尺寸)的数据类型而不会丢失信息   称为扩展转换。这是由JVM和。隐式完成的   也称为隐式铸造。例如,整数数据类型是   直接转换为双。

示例

int a = 100; 
double b = a;
System.out.println(b);

以上示例integer (4 Byte)已转换为double (8 Byte)

  

在以下情况下允许扩展转换:

  • byte可以转换为short,int,long,float或double
  • Short可以转换为int,long,float或double
  • char可以转换为int,long,float或double
  • int可以转换为long,float或double
  • long可以转换为float或double
  • float可以转换为double

Implicit Type Casting

现在来

  

但是,如果我将方法改为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值可能会降低到更小的值。