Java每天十个面试题(只写做错的)

面试题


在32位系统下运行以下程序,可能的输出结果为( ) 1. int main () { int i,a[5]; for (i=0;i<=30;i++) { a[i]=0; printf("%d:hello\n",i); } printf("%d:hello world",i); return 0; }

正确答案: C   
三十行的 i:hello (i∈[0,30]) 和一行 30:hello world
三十行的 i:hello (i∈[0,30]) 和一行 31:hello world
多行的 i:hello (i∈[0,30] )
多行的 i:hello (i∈[0,31])

解析: 数组越界: 下面的代码执行不到


2.
Java创建对象的说法正确的有()
正确答案: A B C D   
用new语句创建对象,是最常见的创建对象的方法。
运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。
调用对象的clone()方法。
运用反序列化手段,调用java.io.ObjectInputStream对象的 readObject()方法。

    3下列代码的输出结果是_____
    1
    2
    boolean b=true?false:true==true?false:true;
    System.out.println(b);
解析:booleanb=true?false:true==true?false:true;
    true?false:(true==true)?false:true;
    true?false:((true==true)?false:true);
    false

4.如下代码,执行test()函数后,屏幕打印结果为()

public class Test2
{
public void add(Byte b)
{
    b = b++;
}
public void test()
{
    Byte a = 127;
    Byte b = 127;
    add(++a);
    System.out.print(a + " ");
    add(b);
    System.out.print(b + "");
    }
}
    答案:-128 127

jiexi:这里简单说明两点:
1.b = b++;这一操作并未改变b的值,
2.++a先是触发拆箱操作Byte.byteValue,得到基本类型的值127,然后执行+1操作,使得值变为-128,最后触发装箱操作Byte.valueOf将value=-128的Byte对象赋值给a。
下面通过反编译得到字节码详细说明++a的执行过程:


// 源代码
public static void main(String[] args) {
    Byte a = 127;
    ++a;
}
// 字节码
public static void main(java.lang.String[]);
    Code:
       0: bipush        127 // 将一个byte型常量值推送至操作数栈栈顶
       2: invokestatic  #2  // 自动装箱:访问栈顶元素,作为函数实参传入静态方法Byte.valueOf(byte),    
                            // 返回value值为127的Byte对象的地址,并压栈
       5: astore_1          // 将栈顶数值赋值给局部变量表中下标为1的引用型局部变量a,栈顶数值出栈。此时a对应的byte值为127。
       6: aload_1           // 局部变量表中下标为1的引用型局部变量a进栈       
       7: invokevirtual #3  // 自动拆箱,访问栈顶元素a,调用实例方法a.byteValue获取a所指Byte
                            // 对象的value值,并压栈
      10: iconst_1          // int型常量值1进栈
      11: iadd              // 依次弹出栈顶两int型数值1(0000 0001)、127(0111 1111)
                            //(byte类型自动转型为int类型)相加,并将结果128(1000 0000)进栈
      12: i2b               // 栈顶int值128(1000 0000)出栈,强转成byte值-128(1000 0000),并且结果进栈
      13: invokestatic  #2  // 自动装箱:访问栈顶元素,作为函数实参传入静态方法Byte.valueOf(byte),
                            // 返回value值为-128的Byte对象的地址,并压栈
      16: astore_1          // 将栈顶数值赋值给局部变量表中下标为1的引用型局部变量a,栈顶数值出栈。此时a对应的byte值为-128。
      17: return
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值