1.下列java程序的输出结果为____。
public class Example{
String str=new String("hello");
char[]ch={'a','b'};
public static void main(String args[]){
Example ex=new Example();
ex.change(ex.str,ex.ch);
System.out.print(ex.str+" and ");
System.out.print(ex.ch);
}
public void change(String str,char ch[]){
str="test ok";
ch[0]='c';
}
}A.hello and ab
B.hello and cb
C.hello and a
D.test ok and ab
E.test ok and cb
F.test ok and c
答案是B。解析:对于这里的str ,实参传过来的是一个地址,由于该地址指向的是字符串常量,所以这里不能改变该地址里的内容。而ch[]里面的值是可以改变的。
2.对于abstract声明的类,下面说法正确的是____。
A.可以实例化
B.不可以被继承
C.子类为abstract
D.只能被继承
E.可以被抽象类继承
答案是E。解析:这里得注意一下D答案,我们知道抽象类是不能实例化的,如果抽象类不被继承好像是不能做什么事,但是我们可以声明了放在那里,对我们的程序也没什么影响,所以不是只能被继承。
3.检查程序,是否存在问题,如果存在指出问题所在,如果不存在,说明输出结果。
package algorithms.com.guan.javajicu;
public class Inc {
public static void main(String[] args) {
Inc inc = new Inc();
int i = 0;
inc.fermin(i);
i= i ++;
System.out.println(i);
}
void fermin(int i){
i++;
}
}
A.0
B.1
C.2
D.3
答案是A。解析:首先fermin函数对i是没有影响的。其次i=i++这里的讲解可以参考一下这篇文章:http://blog..net/miderph84/article/details/3390166
4.byte b1=1,b2=2,b3,b6;
final byte b4=4,b5=6;
b6=b4+b5;
b3=(b1+b2);
System.out.println(b3+b6);关于上面代码片段叙述正确的是()
A.输出结果:13
B.语句:b6=b4+b5编译出错
C.语句:b3=b1+b2编译出错
D.运行期抛出异常
答案是C。解析:被final修饰的变量不仅值不能被改变,而且它的类型也不变,所以在参加运算时类型不变,因此B不会报错;而C中b1与b2的类型为byte,在参与运算时会自动提升至int,所以右边做完运算后的类型是int,赋值给b3时应该进行强制转换,这里没有强转,所以C会编译出错。
5.写出下面的答案
public static void main(String[] args) {
// TODO Auto-generated method stub\
Integer i = 100;
Integer j = 100;
System.out.println(j==i);
i = 200;
j = 200;
System.out.println(j==i);
i = new Integer(100);
j = new Integer(100);System.out.println(j==i);
Integer a = new Integer(1000);
int b = 1000;
System.out.println(a == b);
}
答案是:true false false。解析:首先Integer是包装类,所以在用“==”比较时,比较的是两个对象的地址值。在jdk1.8的版本中,对于Integer i = 100;这句代码,意思是JVM在内存中分配了一块空间,里面的值为100,当第二次Integer j= 100;时JVM会先去内存中找有没有值为100的,由于已经存在了,所以并不会重新再给它分配一块内存,而是为了节约内存j指向了i的那块内存,因此这里i和j的地址值相同,所以第一个为true。那第二个为什么为false呢?因为jdk1.8中JVM认为只要这个值超过1byte(-128~+127)就会重新给它分配内存,所以此时的i和j的地址不同,结果为false。第三个是因为直接new的两个不同的对象,所以地址不同,结果为false。第四个注意b这里是int类型。当int和Integer进行==比较的时候,Java会把Integer进行自动拆箱,也就是把Integer转成int类型,所以这里进行比较的是int类型的值,所以结果即为true。