锁定老帖子 主题:一道郁闷的面试题
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-08-07
这是文字游戏,精确的解释应该是这样的:
JAVA中,对象做参数,实际传递的是"这个对象引用的值",其实这个是基本功了.注意绝对不是简单的引用. 看过Think In Java的人都应该能理解到.因为这里的引用其实与C/C++的引用是不太一样的. |
|
返回顶楼 | |
发表时间:2007-08-07
liquidthinker 写道 ddandyy 写道 很简单 你做一个test好了
不要让他把值return回来 做一个void方法 把map给他 然后在方法里改变 你在外面会看到map的值有变化 这就是因为给他的只是这个map的引用 如果是值传 外面的map应该不变吧 另外说明 基本类型是值传 你传一个String过去 如果不return的话 外面的String是不会变的 赞同对象是引用传递,基本类型是值传递 String也是对象,不是基本类型,是引用传递的,所以上面String的例子解释是错误的,虽然效果的确是那样. 上面引用的String的例子,为什么外面的String不会改变?按道理说String作为对象是引用传递的.这里面有一条规则,我想在javaeye上很多人包括一些比较牛的达人也未必很清楚: 对象传递到方法中时,实际上是传递的这个对象的引用,在方法内可以改变这个引用所指向的那个对象的属性,无论这些属性是基本类型还是对象,但是不能改变引用本身,不能使该引用指向一个新的对象. 因此,在方法内改变String,无外乎两种方式,用等号直接赋值,或者用new String方法 String s1="XXX"; String s2=new String("YYY"); 这两种方法都会使之前的引用指向另一个对象,不符合前面的规则,因此在方法外面看到String不会改变.(关于这两种方法有很多探讨,这里不多说) 改用StringBuffer,方法内操作append方法,测试结果一目了然. String的方式不同是因为java里面对string的机制决定的 map的话改里面的值 是直接修改引用指向的地址里面的值的 string不一样 string的引用指向是固定的 比如有一个引用指向 "a" 那么所有 String str = "a" 都会指向这个地址 当在方法内 str = "b" 的时候 是新new一个"b"的地址 然后把引用指过去的 也就是他实际上是换了方法内的引用地址 而方法外还指向原来的 所以外面的string不会变 |
|
返回顶楼 | |
发表时间:2007-08-07
做个test就是了,看看是值传递还是引用传递,人家应该是想考考你对面向对象概念的理解。
|
|
返回顶楼 | |
发表时间:2007-08-08
没什么意思!只要知道传的是什么就行了!传得是这个对象“地址”
地址是用什么来表示呢?是值啊!所以有人说它是传值。可这个对象的"地址"它还有另一个名字叫引用! 你说它倒底是值,还是引用呢!都对吧!你只要解释说清楚了!就行了!如果直接说是值还是引用,说不清的 |
|
返回顶楼 | |