类似这样的问题 以前也有人问过。下面是 java 三元操作符的规则
(1)如果表达式1和表达式2具有相同的类型,那么整个条件运算符结果的类型就是这个类型。
(2)如果一个表达式的类型是T,T是byte或short或char,另一个表达式的类型是int类型的常量表达式,而且这个常量表达式的值是可以用类型T表示的(也就是说,常量表达式的值是在类型T的取值范围之内),那么整个条件运算符结果的类型就是T。
(3)除以上情况外,如果表达式1和表达式2的类型不同,那么将进行类型提升,整个条件运算符结果的类型就是提升后的类型。
上面的规则也许你不太明白 那么我来细细分析一下你的代码
System.out.println((n1>9)?(char)(n1-10+'A'):n1);
我们来吧 上面的代码拆成两行 应该真么写呢?
虽然看起来这是一个很简单事 但是 当你拆开的时候 问题就来了
? 后面的来个结果 是不同类型的 一个是 char ,一个是int?
为了兼容 int 和Char类型 那么接受 这个表达是的值的变量 就必须 兼容 char 和int 两种类型
所以拆开之后最少要写成这样- int timp = (n1>9)?(char)(n1-10+'A'):n1
- System.out.println(timp);
复制代码 上面的代码是 跟你写的那行代码等效的,也就是说 编译器做了判断 这个表达是的值 的类型至少是Int 型的,
你这句话 传入的 是一个Int型的变量。
因此 建议 不要为了 少敲几下键盘 而放弃代码的易读和简洁性。让人一看就明白的代码 才是号代码。{:soso_e100:}
|