JAVA学习之面试题2

来源:互联网 发布:java h5微信支付接口 编辑:程序博客网 时间:2024/05/18 07:56

1、short s1 = 1; s1 = s1 +1;有什么错?short s1 = 1; s1 += 1;有什么错?

答:对于short s1 = 1; s1 = s1 + 1;由于s1 + 1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。

对于short s1 = 1;s1 += 1;由于+=是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。

2、char型变量中能不能存储一个中文汉字?为什么?

答:char型变量是用来存储Unicode编码的字符的,Unicode编码字符集中包含了汉字,所以char型变量可以存储汉字。不过,如果某个特殊的汉字没有被包含在unicode编码集中,这个char型变量中就不能存储这个特殊汉字。另外,unicode编码占用两个字节,所以,char类型的变量也是占用两个字节。

3、用最有效率的方法算出2乘以8等于几?

答:2<<3

因为将一个数左移n位,就相当于乘以了2的n次方,那么,一个数乘以8只要将其左移3位即可,而位运算cpu直接支持的,效率最高,所以,2乘以8等于几的最效率方法是:2<<3;

4、请设计一个一百亿的计算器

答:方案一:使用long类型,因为int的范围大致是-21~21,一百亿完全超出int的范围

方案二:自己设计一个类,大概功能如下:

(1)这个类内部有两个成员变量,一个表示符号,另一个用字节数组表示数值的二进制数

(2)有一个构造方法,把一个包含多位数值的字符串转换到内部的符号和字节数组中

(3)提供加减乘除的功能

public class BigInteger{
private int sign;
private byte[] val;

public BigInteger add(BigInteger other) {
sign = ;

val = ;
}

public BigInteger subtract(BiInteger other) {

}

public BigInteger multiply(BigInteger other) {

}

public BigInteger divide(BigInteger other) {

}
}

5、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?

答: 使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。例如,对于如下语句:

final StringBuilder s = new StringBuilder("I love java");

执行如下语句时将报告编译错误:

s = new StringBuilder("");

但是,执行如下语句则可以通过编译:

s.append(", good!");

值得一提的是,有人定义方法参数时,可能想采用如下方式来阻止方法内部修改传进来的参数对象:

public void method(final StringBuilder param) {

}

实际上,这是办不到的,在该方法内部仍然可以增加如下代码来修改参数对象:

param.append("abcd");




0 0
原创粉丝点击