Java面试题汇总
1.long(8)与float(4)的取值范围谁大谁小
回答:float的计算方式与long类型不一样
float=(-1)s*M*2E,E的取值范围可以取到127
long的最大值为2^63-1,float的指数比long大,所以float的取值范围大。
s是符号位,E是指数位,M是值
float类型计算方法为:M2^E
M可取值带入
E指数的取值范围为0~255,根据IEEE 754规定 0表示0,255表示无穷大,因此还有1~254可用,共254个数可用,因此取值范围为-127到127为E的取值范围
long的取值为M2^63
float的取值为M*2^127
因为float的指数大于long的指数所以float的取值范围大
2.Java语言中的字符char可以存储一个中文汉字吗?为什么?
可以。因为Java语言采用的是Unicode编码。Unicode编码中的每个字符占用两个字节。中文也是占用两个字节,utf-8编码是unicode中的一种编码,所以,java中的字符可以存储一个中文汉字
3.看下面的程序是否有问题,如果有问题,请指出并说明理由?
short s=1;s=s+1;
short s=1;s+=1;
s=s+1不能把int转成short,需要强制类型转换s=(short)(s+1);
s+=1;自动帮强制类型转换
总结:扩展运算符会帮忙自动进行强制类型转换。
4.请自己实现两个整数变量的交换(不需要定义第三方变量)
考点:位异或运算符特点:
^的特点:一个数据对另一个数据位异或两次,该数本身不变
int x=1;
int y=2;
x=x^y;// x=1^2
y=x^y;//y=1 ^2 ^2=1
x=x^y;//y=1 ^2 ^1=2
System.out.println(“x=”+x);
System.out.println(“y=”+y);
运行结果:x=2
y=1
5.最有效率的算出2*8的结果
2*2^3
System.out.println(2<<3);
6.byte可以作为switch的表达式吗
可以
7.long可以作为switch的表达式吗
可以
8.String可以作为switch的表达式吗
可以,但是必须jdk1.7以后支持
9.return和break以及continue的区别?
return是结束方法,return后面的代码都不执行
break是跳出循环,循环外面的代码还是会执行
continue是终止本次循环继续下个循环
break和continue只能用在循环结构语句中
return ,不仅可以用在循环结构中,也可以用在循环结构外
10.java中到底是传值还是传地址
1).既是传值也是传地址。基本数据类型传递的是值,引用数据类型传递的是地址
2).java中只有传值,因为地址值也是值