JAVA模块有关运算符的经典面试题

一、运算符

1.算术运算符

1.1 面试题一:

下列输出结果为?

​ int a = 8;
​ int b =(a++)+(++a)+(a*10);

//代码一 证明:
public class 类名(备注:类名请自己取){
	public static void main (String[] args){
		int a = 8;
		int b =(a++)+(++a)+(a*10);
		System.out.prinln(b);//118
	}
}
1.2 面试题二:

下列输出结果为:

​ int i = 0;

​ i = ++i;

System.out.println(i);

​ int i = 0;

​ i = i++;

System.out.println(i);

//代码二 证明:
public class 类名(备注:类名请自己取){
	public static void main (String[] args){
		int i = 0;

		i = ++i;

System.out.println(i);//i=1

		int i = 0;

		i = i++;	

System.out.println(i);// i=0
	}
}

代码一 理解

分析解剖:int b=(a++)+(++a)+(a * 10);
可拆分为:c=(a++);d=(++a);e=(a * 10);
所以:int b=c+d+e;
从左到右依次计算;
a++为先使用再自增,使用a=8先复制给c=8后,a再自增为9,a再更新变量为:9
++a先自增,再使用,当a=9时,++a先自增为10后,更新变量为10;再赋值给d;此时d=10;
跟新的变量a=10,所以e=((a=10)*10)=100;所以e=100;
故,int b=c+d+e=8+10+100=118;

所以:int b=(a++)+(++a)+(a*10)=118;

代码二 理解

​ i = ++i; //++i为先自增,在使用
​ //底层原理:
​ //i = (int)(i+1);
​ //i = i;
​ System.out.println(i);//1

​ i = i++;//i++为先使用,再自增
​ //底层原理:
​ //int temp = i;–temp用于记录i最初的值
​ //i = (int)(i+1);
​ //i = temp
​ System.out.println(i);//0

2.赋值运算符

2.1 面试题一:

​ int a,b;

​ a = b = 100;

​ System.out.println(a);

​ System.out.println(b);

2.2 面试题二:

//下面的两种写法结果分别是?

​ short s=1;

​ s = s+1;

​ short s=1;

​ s += 1;

代码一 理解

public static void main(String[] args){
        
        //输出结果为?
		//一次性声明多个变量
		int a,b; 
		a = b = 100;//把100赋值给b,b再赋值给a
		System.out.println(a);//100
		System.out.println(b);//100
    }

代码二 理解

public static void main(String[] args){
        
        //下面的两种写法结果分别是?
		short s=1; 
		s = s+1;//报错:short类型的变量s 与 int类型的数字字面量1 做运算的结果是int类型 
		short s=1; 
		s += 1;//s = (short)(s+1);//s=2;
    }

3.关系运算符

3.1 面试题一:

指出下列输出结果:

​ int x = 10;
​ int y = 10;
​ boolean flag = (x == y);
​ System.out.println(flag);
​ flag = (x = y);

​ System.out.println(flag);

3.2 面试题二:

指出下列输出结果:

​ boolean b1 = true;
​ boolean b2 = false;
​ boolean b3 = (b1 == b2);
​ System.out.println(b3);
​ boolean b4 = (b1 = b2);
​ System.out.println(b4);

代码一 理解

public static void main(String[] args){
	int x = 10;
	int y = 10;
    boolean flag = (x == y);
    System.out.println(flag);//true
    flag = (x = y);//报错:boolean不能与其他类型兼容
    System.out.println(flag);    
    
}

代码二 理解

public static void main(String[] args){
        boolean b1 = true;
		boolean b2 = false;
		boolean b3 = (b1 == b2);//因为true!=false,所以b3为false
		System.out.println(b3);//false
		boolean b4 = (b1 = b2);//将b2赋值给b1,再将赋值过后的b1赋值给b4
		System.out.println(b4);//false
}	

4.三目运算符/三元运算符

4.1 面试题一:

int a = 5;

System.out.println(“a=”+((a<5)?10.9:9));

​ A. 编译错误 B. 10.9

​ C. 9 D: 以上答案都不对

4.2 面试题二:

char x =‘x’;

int i =10;

System.out.println(false?i:x);

System.out.println(false?100:x);

A. 120 x B. 120 120

C. x 120 D. 以上答案都不对

4.3 面试题三:

char m = ‘x’;

System.out.println(false?100:m);

System.out.println(false?65536:m);

解析面试题一

int a = 5;

System.out.println(“a=”+((a<5)?10.9:9));

//(a<5)==(5<5)所以条件不成立为false

10.9:9 //其中10.9为double类型 9为int类型,故9由int类型自转为double类型

从而实际上是10.9:9.0

三目运算符,true选前者,false选后者,

故输出结果为a=9.0

所以选D答案

解析面试题二

char x =‘x’;

int i =10;

System.out.println(false?i:x);//120

System.out.println(false?100:x);//x

(i:x)==(10:120) //注意:120为是 x的ASCII码的值

前者为int类型,后者为char类型自上而下的自动转换成int类型才能来做比较

故第一个输出为:120

false?100:x 值一为常量,值二为变量

且常量在变量类型的取值范围内

则按照值二变量类型返回数据

故第二个输出为:x

故选择A答案

解析面试题三

char x = ‘x’;//‘x’ - ASCII - 120

System.out.println(false?100:x);//x

System.out.println(false?65536:x);//120

(false?)100:x 同理与面试题二 输出为x

false?65536:x 值一为常量,值二为变量

且常量不在变量类型的取值范围内,char的取值范围为(0~65535)

则按照值二变量类型自上而下自动转成int类型,'x’的ASCII码为120

即第二个输出值为120

所以输出的结果为 x 和 120

5.位运算符

5.1 面试题一:

使用最有效率的方式计算2*8

5.2 面试题二:

描述下列代码的输出结果

System.out.prinlnt((int)(char)(byte)-1);

解析 面试题一:

使用最有效率的方式计算2*8

最有效率的方式为二进制编码;而非使用计算

直接使用整体左移3个位;然后系统自动补位

故使用:System.out.println(2<<3);

解析 面试题二

描述下列代码的输出结果

System.out.prinlnt((int)(char)(byte)-1);65535

//-1 int:1111,1111,1111,1111,1111,1111,1111,1111
//(byte):1111,1111

//(char):1111,1111,1111,1111 – char类型向上转型用0补位
//(int) :0000,0000,0000,0000,1111,1111,1111,1111
//所以输出为65535

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

榮十一

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值