1.对于short s1 = 1;s1 = s1 + 1;由于s1 +1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制类型转换的错误。对于short s1 = 1;s1 +=1;由于+=是Java语言规定的运算符,Java编译器会对它进行特殊处理,因此可以正确编译。
2.char型变量是用来存储UnICode编码的字符的,unicode编码字符集包含了汉字,所以,char型变量中当然可以存储汉字。不过,如果某个特殊的汉字没有被包含在Unicode编码字符集中,那么这个char型变量中就不能存储这个特殊汉字。因为Unicode编码占用两个字节,所以char类型变量也是占用两个字节。
3.用最有效率的方法算出2*8的结果?
2<<3,(左移三位)因为将一个数左移n位,就相当于乘以2的几次方,一个数乘以8只需要将其左移三位即可,而位运算CPU直接支持的,效率最高。
4.使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。
比如:
final StringBuffer a = new StringBuffer(“immutable”);
a = new StringBuffer(""); // 运行时编译器会报错
a.append(“broken!”); // 可以通过编译
在定义方法参数时,可能想采用如下的形式来阻止方法内部修改传进来的参数对象:
public void method(final StringBuffer param)
{
}
实际上,这是办不到的,在该方法内部仍然可以增加如下代码来修改参数对象:
param。append(“a”);