锁定老帖子 主题:一道郁闷的面试题
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-06-10
这东西还真多人讨论啊
|
|
返回顶楼 | |
发表时间:2007-06-10
hexiaodong 写道 ken1984 写道 hexiaodong 写道 ken1984 写道 翻译惹的祸啊,看看C/C++里面吧,用一个&就一目了然了;扯远了,:(,JAVA的对象都是传引用,但基本类型包括Integer,String等都是传值。只要记住这些就OK啦。
Integer,String 也是传引用的。 对于非基础类型的对象,大家通过属性赋值可以改变对象的属性值,因此比较容易理解是传引用的。但对于基础类型,并没有什么属性值可以让你改变,通常都是直接构造一个新的基础类型对象赋值给参数,这样新值属于内部重新构造的对象,参数指向了新的对象,而方法外的变量仍然指向原先的对象。这种做法当然不会影响方法外的相应对象了。方法内对参数重新赋值是不能改变方法外相应基础类型变量值的,因此很多人就误以为方法参数如果是基础类型就是传值的了。 在用户层面来说,传一个参数,如果内部可以修改它的值,那就是传引用,反之就是传值了。Integer,String你试下传个参数给方法修改它的值,然后在方法外面再打印值,肯定还是未修改前的值。如果是重新构造一个对象,那怎么能叫引用呢? 是的,Integer和String不能在方法内改变他们的值,是因为Integer和String没有提供能够改变值的方法,但这并不说明是传值的。 请看清楚我说的话,:(,是用户层面来说的不是底层;另外你说的没有提供修改的方法不太正确,传值还是引用得看是栈上分配的还是堆上。如果是栈上,不管提供什么方法,是不可能有引用的,除非是局部引用的。 |
|
返回顶楼 | |
发表时间:2007-06-12
引用拉,呵呵
|
|
返回顶楼 | |
发表时间:2007-06-12
当然是传引用了,可以好好看看thinking in java,里面关于这个说的比较好,传递的只是一个reference,简单类型是值传递的,比如int,float
|
|
返回顶楼 | |
发表时间:2007-06-12
你可以理解对象就是一台台电视,而引用就是遥控器,java中是遥控器传来传去,而不是电视机在传来传去,拿到了遥控器就可以操作电视机,一个是放在stack里的,一个是放在heap里的
|
|
返回顶楼 | |
发表时间:2007-06-12
说传值那是在扣字眼,有意思吗?我不知道引用也是一个值?这个概念产生就是用来区分这两种传递方式,非要较一下劲有意思吗?显得你高深些?
|
|
返回顶楼 | |
发表时间:2007-06-14
一个叫法而已,别在抠字眼了,我只知道传递的是被复制的,不过是原始类型还是对象的引用,知道这个写程序就不会有误,足够了
|
|
返回顶楼 | |
发表时间:2007-06-15
文字游戏而已,只要记住java传的对象传的都是内存地址就可以了,这样回答我想面试官应该会满意的。
|
|
返回顶楼 | |
发表时间:2007-06-16
java都是引用传递。
所谓的Integer, String也是的,只是这些的对象的值不能改而已,没有setValue之类的方法。JVM不可能区别对待的 |
|
返回顶楼 | |
发表时间:2007-06-18
JAVA最终还是传值的吧.
|
|
返回顶楼 | |