首页 > 试题广场 >

以下Java程序运行的结果是: () public cl

[单选题]
以下Java程序运行的结果是: ()
public class Tester{
public static void main(String[] args){
   Integer var1=new Integer(1);
   Integer var2=var1;
   doSomething(var2);
   System.out.print(var1.intValue());
   System.out.print(var1==var2);
}
public static void doSomething(Integer integer){
    integer=new Integer(2);
  }
}

  • 1true
  • 2true
  • 1false
  • 2false

方法中的局部变量最开始所指向的是V2所指向的Integer对象,如果在此方法内对所指向的对象进行修改,如把对象中的属性值修改,则会影响到原来的对象。但是只是把局部变量修改为指向别的对象,则对原有对象无任何影响。

调用dosomething时把v2作为实参传进去。实际会在栈内新建变量integer(形参),也就是方法的局部变量来指向v2所指对象。即此时integer==var2为true.

发表于 2019-11-08 13:55:27 回复(0)
方法中是局部变量,作用后会自动释放
发表于 2019-10-14 18:51:17 回复(2)
当把var2对象作为参数传给dosomething方法的时候,其实是把var2对象的引用地址传给了dosomething,所以现在var2和integer两个变量都指向了main方法中生成的new Integer(1) 对象,同理,在dosomething方法中重新new Integer(2)对象的并赋值给integer的时候,其实只是让integer指向一个新的对象,但是原来的var2却不会改变,仍然指向原来的那个var1对象.局部变量integer随着do something调用结束弹栈,new integer(2)也就成了gc回收的垃圾. 所以var1,var2对象的intvalue输出值都不会改变,它们引用地址还是相同.跟Integer包装类自动装箱拆箱没有关系只是考察了java中对引用的理解.
编辑于 2022-12-06 18:52:29 回复(0)
Java中只有值传递没有引用传递,所以传给方法的是引用的值,方法里只是将值改为指向另一个对象,对原引用无影响
发表于 2020-09-21 19:06:47 回复(0)
就好比自己本身是没变的,只不过去了一个地方
发表于 2019-11-21 01:41:29 回复(0)
方法中是局部变量,作用后会自动释放
发表于 2019-11-07 15:49:37 回复(0)
楼上正确!dosomeThing的时候传进去的integer对象又new了一块新的intger对象内存出来,所以不改变以前的integer对象
发表于 2019-10-26 21:14:26 回复(0)