论坛首页 招聘求职论坛

一道郁闷的面试题

浏览 33058 次
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-08-07  
这是文字游戏,精确的解释应该是这样的:
JAVA中,对象做参数,实际传递的是"这个对象引用的值",其实这个是基本功了.注意绝对不是简单的引用.
看过Think In Java的人都应该能理解到.因为这里的引用其实与C/C++的引用是不太一样的.
0 请登录后投票
   发表时间: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不会变
0 请登录后投票
   发表时间:2007-08-07  
做个test就是了,看看是值传递还是引用传递,人家应该是想考考你对面向对象概念的理解。
0 请登录后投票
   发表时间:2007-08-08  
没什么意思!只要知道传的是什么就行了!传得是这个对象“地址”
地址是用什么来表示呢?是值啊!所以有人说它是传值。可这个对象的"地址"它还有另一个名字叫引用!
   你说它倒底是值,还是引用呢!都对吧!你只要解释说清楚了!就行了!如果直接说是值还是引用,说不清的
0 请登录后投票
论坛首页 招聘求职版

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