首页 > 试题广场 >

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

[单选题]
给出以下代码,请给出结果.
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 回复(44)
此处为Byte是byte的包装类型,初始化为null而不是0
发表于 2015-03-10 13:16:53 回复(20)
没看懂,都没说在同一个包下,为什么能放问x变量?这明显不严谨啊,没在同一个包中肯定是会编译错误的
发表于 2018-05-12 22:17:14 回复(0)
我解释一下,包装类成员或者说任何对象类型为什么不显式初始化的话,新建对象会赋值为null? 因为我们只声明了对象引用,并没有初始化,这样就会让JVM以为我们不需要为对象开辟空间,而只是在虚拟机栈中存放引用,并用关键词null,标明这个引用与堆中没有任何链接。如果我们把包装类变向理解会被初始化0的话,意味着声明的引用与堆中对象值为0有连接,而实际是JVM为了节省内存,并没有为我们开辟空间。所以我们不能像基本类型那样去推理包装类的结果。
发表于 2017-07-13 15:10:52 回复(0)
Byte和byte,傻傻看不清楚。
发表于 2017-06-26 17:08:27 回复(0)
此处为Byte是byte的包装类型,初始化为null而不是0
发表于 2016-08-06 10:06:22 回复(0)
看错了,B居然是大写
发表于 2016-03-13 00:24:29 回复(0)
看错了,以为用的是byte类型
发表于 2015-10-17 14:13:03 回复(0)
当做byte了
发表于 2015-08-12 14:37:20 回复(0)
按照小小的守护所说的[Byte是byte的包装类型,初始化为null而不是0],第二项中,使用t的引用,但是在这个过程中对x进行了一次初始化,所以是42.
发表于 2015-06-25 08:35:39 回复(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)