为什么带有byte参数的方法用short调用方法,为什么不用int?

时间:2017-10-09 18:45:40

标签: java primitive

class Practice {
   public static void aMethod (int val) { System.out.println("int"); }
   public static void aMethod (short val) { System.out.println("short"); }
   public static void aMethod (Object val) { System.out.println("object"); }
   public static void aMethod (String val) { System.out.println("String"); }

   byte b = 9;
   Practice.aMethod(b); // first call My guess:don't know? it is short but why
   Practice.aMethod(9); // second call My guess:int correct 
   Integer i = 9;
   Practice.aMethod(i); // third call My guess: Object correct
   Practice.aMethod("9"); // fourth call My guess: String correct
}

为什么用byte(b)作为参数调用的方法用short?

调用方法

1 个答案:

答案 0 :(得分:1)

Java会自动为您的类型选择最适用的方法。

在这种情况下,您提供byte,这是可能的最小数据类型。所有数据类型的转换如下所示:

  • int - 可以直接从byte转换为int
  • short - 可以直接从byte转换为short
  • String - 不可能,byte不是String(需要使用解析方法)
  • Object - 可能,从byte转换为ByteObject

Java现在自动选择转换为最窄类型

转换为Object支持intshort,因为它引入了一个完整的对象,这是一个巨大的开销。

最后选择short代替int,因为它更小byte适合shortint适合byte

  • -2^(7) - 从2^(7)-1short
  • -2^(15) - 从2^(16)-1int
  • -2^(31) - 从2^(31)-1var data = GetJsonResultData(); //call to JsonResult method. var datastr = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(data.Data); // convert json object to string. var dataclass = Newtonsoft.Json.JsonConvert.DeserializeObject<List<modeldto>>(datastr ); // string json data to class list

Ranges of data-types

(差异较大,但你不会在图片中看到任何内容)