java中兴参与实参相同_java错题集

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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值