Java 条件表达式结果类型不一致问题
2015-09-08 17:05
337 查看
确定条件表达式结果类型的规则过于冗长和复杂,很难完全记住它们,但是其核
心就是一下三点:
• 如果第二个和第三个操作数具有相同的类型, 那么它就是条件表达式的类
型。换句话说,你可以通过绕过混合类型的计算来避免大麻烦。
• 如果一个操作数的类型是 T,T 表示 byte、short 或 char,而另一个操作
数是一个 int 类型的常量表达式,它的值是可以用类型 T 表示的,那么条
件表达式的类型就是 T。
• 否则,将对操作数类型运用二进制数字提升,而条件表达式的类型就是第
二个和第三个操作数被提升之后的类型。
第一个 print 语句打印的是X,而第二个打印的却是 88
在程序的两个条件表达式中,一个操作数的类型是
char,另一个的类型是 int。在两个表达式中,int 操作数都是 0,它可以被表
示成一个 char。然而,只有第一个表达式中的 int 操作数是常量(0),而第二
个表达式中的 int 操作数是变量(i)。因此,第 2 点被应用到了第一个表达式
上,它返回的类型是 char,而第 3 点被应用到了第二个表达式上,其返回的类
型是对 int 和 char 运用了二进制数字提升之后的类型,即 int。
心就是一下三点:
• 如果第二个和第三个操作数具有相同的类型, 那么它就是条件表达式的类
型。换句话说,你可以通过绕过混合类型的计算来避免大麻烦。
• 如果一个操作数的类型是 T,T 表示 byte、short 或 char,而另一个操作
数是一个 int 类型的常量表达式,它的值是可以用类型 T 表示的,那么条
件表达式的类型就是 T。
• 否则,将对操作数类型运用二进制数字提升,而条件表达式的类型就是第
二个和第三个操作数被提升之后的类型。
public class DosEquis{ public static void main(String[] args){ char x = 'X'; int i = 0; System.out.println(true ? x : 0); System.out.println(false ? i : x); } }
第一个 print 语句打印的是X,而第二个打印的却是 88
在程序的两个条件表达式中,一个操作数的类型是
char,另一个的类型是 int。在两个表达式中,int 操作数都是 0,它可以被表
示成一个 char。然而,只有第一个表达式中的 int 操作数是常量(0),而第二
个表达式中的 int 操作数是变量(i)。因此,第 2 点被应用到了第一个表达式
上,它返回的类型是 char,而第 3 点被应用到了第二个表达式上,其返回的类
型是对 int 和 char 运用了二进制数字提升之后的类型,即 int。
相关文章推荐
- Struts2学习之Action接收参数方法二(用DomainModel接收参数(模型驱动))
- spring 之AOP 和继承方法
- maven系列--eclipse的m2插件
- maven系列--eclipse的m2插件
- java中&和&&
- spring中的注解
- java 长整除问题
- spring_150905_sqlmapclient
- 把一个字符串转换成int类型(Java实现)
- Spring事务的传播行为和隔离级别
- JAVA SE 基础复习-基本程序设计(1)
- java web流量检测与解决方案
- struts2,hibernate4,spring3配置时问题汇总及解决办法(架包导入问题)
- Java sleep和wait的区别
- [转]Spring MVC 事务配置
- spring_150904_hibernatetemplate
- java接口开发的的注意事项
- 员工案例增删改查
- JAVA学习——RandomAccessFile
- 深入理解java虚拟机-4 虚拟机类加载机制