若有定义语句: int a=10 ; double b=3.14 ; 则表达式 'A'+a+b 值的类型是()
1. 在表达式中,char 和 short 类型的值,无论有符号还是无符号,都会自动转换成 int 或者 unsigned int(如果 short 的大小和 int 一样,unsigned short 的表示范围就大于 int,在这种情况下,unsigned short 被转换成 unsigned int)。因为它们被转换成表示范围更大的类型,故而把这种转换称为“升级(promotion)”。
2. 按照从高到低的顺序给各种数据类型分等级,依次为:long double, double, float, unsigned long long, long long, unsigned long, long, unsigned int 和 int。这里有一个小小的例外,如果 long 和 int 大小相同,则 unsigned int 的等级应位于 long 之上。char 和 short 并没有出现于这个等级列表,是因为它们应该已经被升级成了 int 或者 unsigned int。
3. 在任何涉及两种数据类型的操作中,它们之间等级较低的类型会被转换成等级较高的类型。
char -> int -> double
;计算结果为较高级的数据类型 public class JudgeBaseType { public static String getBaseType(Object o) { String simpleType = o.getClass().getSimpleName(); switch (simpleType) { case "Byte": return "byte"; case "Short": return "short"; case "Integer": return "int"; case "Long": return "long"; case "Float": return "float"; case "Double": return "double"; case "Character": return "char"; case "Boolean": return "boolean"; default: return "不是基本数据类型,建议采用类的方法直接判断"; } } }