Java中的转换和简短参数问题

Ala*_*an2 5 java

我想了解以下代码:

public class A {
   private void doTask()  {    
      doInt(99);
   }   

   public short doInt(short s)  { 
      return 100;
   }   
}
Run Code Online (Sandbox Code Playgroud)

代码在"doInt(99)"行上给出编译器错误.

The method doInt(short) in the type A is not applicable for the arguments (int)
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么它会给我错误.

Boh*_*ian 7

在java中,整数的默认类型是int.Java将自动向上转发(例如从shortint),但由于可能会丢失数据,因此会发出向下转发的警告(例如从int转到short).

您的代码的修复是这样的:

doInt((short)99);
Run Code Online (Sandbox Code Playgroud)

这种显式向下转换将99(即a int)更改为a short,因此没有(进一步)可能的数据丢失.


ala*_*ter 4

尝试

public class A {
   private void doTask()  {    
      doInt((short)99);
   }   

   public short doInt(short s)  { 
      return (short)100;
   }   
}
Run Code Online (Sandbox Code Playgroud)

Java 认为程序中的所有文字(例如 99 或 100)都是 int。

如果您传递大数字,例如 12345678,它将被剪切以适合short值。Java 没有你就无法削减数字,所以你必须自己做。这样你就可以看到你将 int 转换为 Short