1.求输出
/*
* @author mengdexin
* */
public class Test {
public static void main(String[] args) {
char x = 'x';
int i = 10;
System.out.println(false ? i : x ); //i不是常量,x会被转为int
System.out.println(false ? 10 : x ); //10是常量,不变化
}
}
解析:
条件表达式的返回类型应该看第2和第3个的类型吧: (1)如果第2和第3个数据的类型一致,那么就返回这个类型。 (2)如果一个类型是byte、short或者char,而且另一个是int常量(注意是常量),而且这个常量可以用前面的类型来表示,所以返回的应该就是前面的3个类型之一,具体看是3个的哪一个。 (3)如果不符合(1)(2),则第2和第3数据的类型自动比较,实现向下转型,即小类型向大类型转换,低精度向高精度转换,最后返回的是大类型或者高精度的类型。
120
x
2.运算符优先级问题,下面代码的结果是多少?(笔试)
- package test;
- public class Test {
- public static void main(String[] args) {
- int k = 0;
- int ret = ++k + k++ + ++k + k;
- // ret的值为多少
- System.err.println(ret); //1+1+3+3=8
- }
- }
3.运算符问题,下面代码分别输出什么?(笔试)
- package test;
- public class Test {
- public static void main(String[] args) {
- int i1 = 10, i2 = 10;
- System.err.println("i1 + i2 = " + i1 + i2);
- System.err.println("i1 - i2 = " + (i1 - i2));
- System.err.println("i1 * i2 = " + i1 * i2);
- System.err.println("i1 / i2 = " + i1 / i2);
- }
- }
i1 + i2 = 1010
i1 - i2 = 0
i1 * i2 = 100
i1 / i2 = 1