6

次のコードを理解しようとしています。

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

   public short doInt(short s)  { 
      return 100;
   }   
}

このコードでは、「doInt(99)」行でコンパイラ エラーが発生します。

The method doInt(short) in the type A is not applicable for the arguments (int)

エラーが発生する理由を誰かが説明できますか。

4

5 に答える 5

7

Java では、整数のデフォルトの型はint. Java は自動的にアップキャスト (例: fromshortから) を行いますが、データが失われる可能性があるためint、ダウンキャスト (例: fromintからshort) では警告を発します。

コードの修正は次のとおりです。

doInt((short)99);

この明示的なダウンキャストは99(これはint) を に変更するshortため、(それ以上) データが失われる可能性はありません。

于 2012-06-16T13:57:53.610 に答える
4

試す

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

   public short doInt(short s)  { 
      return (short)100;
   }   
}

Java は、プログラム内のすべてのリテラル (99 や 100 など) を int と見なします。

大きな数値、たとえば 12345678 を渡すと、short値に合わせて切り取られます。Java はあなたなしでは数を切ることができないので、自分でそれをしなければなりません。そうすれば、ショートにキャストすることがわかります

于 2012-06-16T13:57:35.303 に答える
1

理由がない限り、通常は int データ型がデフォルトの選択です。

したがって、99として扱われますint

プリミティブ データ型の詳細を読む

必要に応じて明示的なキャストが必要です。
に変更doInt( 99 )するdoInt( ( short ) 99 )と、動作するはずです。

于 2012-06-16T14:00:24.330 に答える
1

エラーの主な原因は、

ストレージ サイズが大きい非リテラル数値型を暗黙的に short 型に変換することはできません

したがって、コードを次のように変更します。

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

   public short doInt(short s)  { 
      return (short)100;
   }   
}
于 2012-06-16T14:00:51.053 に答える
1

99 をショートにキャストする必要があります。以下をお試しください

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

   public short doInt(short s)  { 
      return 100;
   }   
} 
于 2012-06-16T13:58:10.883 に答える