论坛首页 招聘求职论坛

一道郁闷的面试题

浏览 33421 次
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-06-10  
这东西还真多人讨论啊
0 请登录后投票
   发表时间:2007-06-10  
hexiaodong 写道
ken1984 写道
hexiaodong 写道
ken1984 写道
翻译惹的祸啊,看看C/C++里面吧,用一个&就一目了然了;扯远了,:(,JAVA的对象都是传引用,但基本类型包括Integer,String等都是传值。只要记住这些就OK啦。


Integer,String 也是传引用的。
对于非基础类型的对象,大家通过属性赋值可以改变对象的属性值,因此比较容易理解是传引用的。但对于基础类型,并没有什么属性值可以让你改变,通常都是直接构造一个新的基础类型对象赋值给参数,这样新值属于内部重新构造的对象,参数指向了新的对象,而方法外的变量仍然指向原先的对象。这种做法当然不会影响方法外的相应对象了。方法内对参数重新赋值是不能改变方法外相应基础类型变量值的,因此很多人就误以为方法参数如果是基础类型就是传值的了。


在用户层面来说,传一个参数,如果内部可以修改它的值,那就是传引用,反之就是传值了。Integer,String你试下传个参数给方法修改它的值,然后在方法外面再打印值,肯定还是未修改前的值。如果是重新构造一个对象,那怎么能叫引用呢?


是的,Integer和String不能在方法内改变他们的值,是因为Integer和String没有提供能够改变值的方法,但这并不说明是传值的。




请看清楚我说的话,:(,是用户层面来说的不是底层;另外你说的没有提供修改的方法不太正确,传值还是引用得看是栈上分配的还是堆上。如果是栈上,不管提供什么方法,是不可能有引用的,除非是局部引用的。
0 请登录后投票
   发表时间:2007-06-12  
引用拉,呵呵
0 请登录后投票
   发表时间:2007-06-12  
当然是传引用了,可以好好看看thinking in java,里面关于这个说的比较好,传递的只是一个reference,简单类型是值传递的,比如int,float
0 请登录后投票
   发表时间:2007-06-12  
你可以理解对象就是一台台电视,而引用就是遥控器,java中是遥控器传来传去,而不是电视机在传来传去,拿到了遥控器就可以操作电视机,一个是放在stack里的,一个是放在heap里的
0 请登录后投票
   发表时间:2007-06-12  
说传值那是在扣字眼,有意思吗?我不知道引用也是一个值?这个概念产生就是用来区分这两种传递方式,非要较一下劲有意思吗?显得你高深些?
0 请登录后投票
   发表时间:2007-06-14  
一个叫法而已,别在抠字眼了,我只知道传递的是被复制的,不过是原始类型还是对象的引用,知道这个写程序就不会有误,足够了
0 请登录后投票
   发表时间:2007-06-15  
文字游戏而已,只要记住java传的对象传的都是内存地址就可以了,这样回答我想面试官应该会满意的。
0 请登录后投票
   发表时间:2007-06-16  
java都是引用传递。
所谓的Integer, String也是的,只是这些的对象的值不能改而已,没有setValue之类的方法。JVM不可能区别对待的
0 请登录后投票
   发表时间:2007-06-18  
  JAVA最终还是传值的吧.
0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics