首页 > 试题广场 >

给出以下代码,请给出结果.

[单选题]
给出以下代码,请给出结果.
class Two{
    Byte x;
}
class PassO{
    public static void main(String[] args){
        PassO p=new PassO();
        p.start();
    }
    void start(){
        Two t=new Two();
        System.out.print(t.x+””);
        Two t2=fix(t);
        System.out.print(t.x+” ” +t2.x);
    }
    Two fix(Two tt){
        tt.x=42;
        return tt;
    }
}

  • null null 42
  • null 42 42
  • 0 0 42
  • 0 42 42
  • An exception is thrown at runtime
  • Compilation
发表于 2016-08-15 22:42:01 回复(45)
此处为Byte是byte的包装类型,初始化为null而不是0
发表于 2015-03-10 13:16:53 回复(20)
没看懂,都没说在同一个包下,为什么能放问x变量?这明显不严谨啊,没在同一个包中肯定是会编译错误的
发表于 2018-05-12 22:17:14 回复(0)
此处为Byte是byte的包装类型,初始化为null而不是0
发表于 2016-08-06 10:06:22 回复(0)
看错了,B居然是大写
发表于 2016-03-13 00:24:29 回复(0)
解题思路:
1.注意第二行代码,Byte x;Byte是包装类,不是byte(基本数据类型),因此Byte的默认是null,不是0
2.t是一个引用地址类型,在调用fit(Two tt)函数是,是一个实参到形参的传值,也就是把t的地址赋值给了tt,但是都是指向堆内存中新建的对象,因此当对tt.x和t.x指向是相同的。因此t.x也是42
3.Two t2=fit(t);fit函数返回的还是一个引用地址,这句代码相当于把t(函数里面返回的是tt)的地址赋值给了t2,因此t2.x也是42
发表于 2017-02-24 22:20:58 回复(1)
B.
注意x是Byte类型,也就是byte的包装类型,属于引用类型。实例该类对象时,如果成员变量没有显示初始化那么Java默认初始化为null.
该题中引用类型t作为形参进行传递,形参的改变会改变实参的值,所以再次打印t.x时已经变为42了。
发表于 2015-08-28 11:36:57 回复(7)
t作为参数传进去后,返回的 tt(也就是t2)和 t 是一个地址,所以 t.x+” ” +t2.x都是42
发表于 2015-10-05 18:48:55 回复(0)
注意:是包装类Byte,引用类型!不是基本类型byte
发表于 2016-02-09 23:37:12 回复(0)
这里要理解fix方法,修改的是Two对象,Byte x为该对象的一个变量,因为这个方法是引用传递,所以会改变对象的内容,这里就是tt.x也会跟着变化。
如果把这个成员变量x的属性变为int,则最后输出0 42 42.
发表于 2015-08-12 09:18:51 回复(2)

解析:正确答案为B。首先Byte为包装类,默认值为null。Two t2=fix(t);语句调用了fix方法传入了t对象的地址,可对t对象的成员变量做的修改会影响到实际的对象,在将t对象的地址传回赋值给了t2,t和t2实际指向是同一个对象,所以最后都输出42.

发表于 2017-09-03 18:23:15 回复(1)
只有我看出来了个public class?
发表于 2017-10-21 16:11:49 回复(3)
基本类型初始化赋值为0;
包装类初始化赋值为null。
发表于 2015-11-22 20:48:52 回复(3)
出题人这个小心机真是可以啊
你以为我想考察你值传递?
错!其实我考察的是包装类!
发表于 2019-10-25 11:29:15 回复(0)
看题要看清楚Byte 和byte,Byte初始化为null,byte初始化为0
发表于 2022-02-10 21:26:23 回复(0)
再一次败在大小写上。。。
发表于 2019-02-21 10:24:50 回复(2)
Byte是对象,未初始化时为null。print方法对Object会调用String.valueof(o);String.valueof()判断为null会返回"null"
编辑于 2018-12-02 21:25:46 回复(0)
attention:
    Byte 是包装类 ,引用类型!所以初始化的为null....
    不是基本类型byte
发表于 2016-09-22 08:06:28 回复(0)
此题考查的是对象的初始化默认值和包装类。
在java中,基本类型的初始化都为0,boolean初始化为false,类的初始化都为null。
本题中Two的属性x是Byte类型,是byte的包装类,是类,所以初始化后该属性的值为null,而非0。
本题中fix()方法的参数是引用传递而非值传递,对tt进行修改后,原参数对象的值也进行改动。
发表于 2016-04-03 13:10:27 回复(2)
Byte、Short、Long、Integer、Double、Float、Char、Boolean都是属于引用数据类型,默认初始化为null。而基本数据类型int、short、byte、long 初始化为0,char为null,boolean为false,Double为0.0,float为0.0。
发表于 2021-10-15 19:03:03 回复(0)