如何阻止Java自动将char值转换为int?

时间:2019-01-27 06:24:12

标签: java casting

java编译器会自动将char值转换为int,这样的代码不会引发错误:

public void foo(int i){
   // do something
}

char c = 'a';
foo(c);

是否有某种方法可以阻止编译器始终将char强制转换为int或引发错误?

3 个答案:

答案 0 :(得分:2)

默认情况下,编译器会对提到的https://docs.oracle.com/javase/specs/jls/se8/html/jls-5.html#jls-5.1.2的原始类型进行扩展转换。

因此,它会自动将char转换为int。

您可以通过在foo中使用Integer来避免这种情况。 void foo(Integer i)

答案 1 :(得分:0)

您可以将Get-EventLog -LogName security -InstanceId 4624 -ComputerName $_Computer -Newest 5 | Export-Csv C:\Users\username\Documents\filename 类型的包装器class用作如下所示的方法参数,

int

这将显示编译错误。

答案 2 :(得分:0)

Java正在使用传递给函数的那个​​字符的ASCII码。

下面是这样的代码:

 char c = 'a';
    foo(c);

public void foo( int i){
    System.out.println(i);
}

的输出为:97,与int中的'a'字符等效。

  

此外,如果表达式[在右侧]是类型为byte,short,char或int的常量表达式:

     
      
  • 如果变量的类型为byte,short或char,并且常量的值为常数,则可以使用缩小的原始转换   表达式可以用变量的类型表示。
  •   

您必须了解的是int是Java中的原始类型,但是我们可以使用包装器类,例如Integer , Character , ...

因此您可以使用:

public void foo( Integer i){
        System.out.println(i);
    }

它将引发异常:

 java: incompatible types: char cannot be converted to java.lang.Integer