三目运算符的问题 ( ?: )这个运算符 : 两边的数应该是相同类型的但我这个怎么可以输出for(int i=0;i!=19;++i) System.out.print(" "+(i<10?i:(char)(i+87)+" ")); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 i小于10时,直接输出i的数值,否则 把i+87作为字符的ascii并输出字符 谁跟你说的需要相同类型?尽量不要在条件运算的操作数中使用不同的数据类型,并且条件运算符与 if...else 结构性质并不是完全相同的。下面是 Java Language Specification 上关于条件表达式的说明● 如果第二和第三个操作数在可以转换为数值类型时,会有以下几种情况: ◆ 操作数其中一个是 byte 或 Byte 类型,而另一个是 short 或 Shoft 类型,那么这个表达式就是 shoft 类型 ◆ 操作数中的一个是类型 T (T 可以是 byte、short 或者是 char 类型),而另一个是 int 类型的常数,其可以用 T 类型来表示时,那么这个表达式就是 T 类型 ◆ 操作数中的一个是 Byte 类型,而另一个是 int 类型的常数,其可以用 byte 类型来表示,那么这个表达式就是 byte 类型 ◆ 操作数中的一个是 Short 类型,而另一个是 int 类型的常数,其可以用 short 类型来表示,那么这个表达式就是 short 类型 ◆ 操作数中的一个是 Character 类型,而另一个是 int 类型的常数,其可以用 char 类型来表示,那么这个表达式就是 char 类型 ◆ 否则,双目数值提升(binary numeric promotion)会被用于操作数的类型中,条件表达式的类型是第二个和第三个操作数提升后的类型。注意:双目数值提升时进行拆箱转换和值集转换(value set conversion)PS:这里只是部分的,更多的看 http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#341287 三目运算符,我们通常这么用,列:int j = i<10?i:i-10。这样的话两边的数就应该是相同类型。 那为什么这样,就只输出数,而不会被强转为char呢?for(int i=0;i!=19;++i) System.out.print(" "+(i<10?i:(char)(i+87))+" "); int c;c=(int)(char)(11+87); ======》98lz说的对两者类型要一致,所以编译器默认将char(i+87)又强制转换为int了! 小类型的和大类型的做运算时,应该向大类型的转变所以是char向int型转变,不是变成char型的。 对了是不是(i<10?i:(char)(i+87)+" ") 的话两个都变成String了? 这个 我还真的不知道啊。不过,应该不会吧。一个入参为int型的方法,你可以传进去一个char型变量,但是如果参数类型是String的,好像不可以传入int型的吧。 求解。。IO系统不解之2 编译是报错和运行是报错有和区别? xpdf 为什么不能过滤掉一些文件 Properties的问题,谢谢各位指教一下!~ 求助:关于Component 的add方法 谁知道ImageDisplay类在哪个包里? 封装的问题 关于jswing控件的问题,????????????? idea打包jar提示错误: 找不到或无法加载主类 iterator输出结果 和JAVA合作这么久了,却被一个偶然发现的基础性问题难住了——关于继承
否则 把i+87作为字符的ascii并输出字符
◆ 操作数其中一个是 byte 或 Byte 类型,而另一个是 short 或 Shoft 类型,那么这个表达式就是 shoft 类型
◆ 操作数中的一个是类型 T (T 可以是 byte、short 或者是 char 类型),而另一个是 int 类型的常数,其可以用 T 类型来表示时,那么这个表达式就是 T 类型
◆ 操作数中的一个是 Byte 类型,而另一个是 int 类型的常数,其可以用 byte 类型来表示,那么这个表达式就是 byte 类型
◆ 操作数中的一个是 Short 类型,而另一个是 int 类型的常数,其可以用 short 类型来表示,那么这个表达式就是 short 类型
◆ 操作数中的一个是 Character 类型,而另一个是 int 类型的常数,其可以用 char 类型来表示,那么这个表达式就是 char 类型
◆ 否则,双目数值提升(binary numeric promotion)会被用于操作数的类型中,条件表达式的类型是第二个和第三个操作数提升后的类型。注意:双目数值提升时进行拆箱转换和值集转换(value set conversion)PS:这里只是部分的,更多的看 http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#341287
for(int i=0;i!=19;++i)
System.out.print(" "+(i<10?i:(char)(i+87))+" ");
c=(int)(char)(11+87); ======》98
lz说的对两者类型要一致,所以编译器默认将char(i+87)又强制转换为int了!
所以是char向int型转变,不是变成char型的。
(i<10?i:(char)(i+87)+" ") 的话两个都变成String了?
这个 我还真的不知道啊。不过,应该不会吧。一个入参为int型的方法,你可以传进去一个char型变量,但是如果参数类型是String的,好像不可以传入int型的吧。