JAVA传对象问题

csdnjun 2000-11-02 05:13:00
public changetonew(String str1){
str1 = "new";
}
public void b(){
String str2 = "old";
changetonew(str2);
System.out.println(str2);
}
str的结果仍然是old, Why?
不要告诉我用返回值来解决,
如果我由许多参数需要得到返回直怎么办?
java不是说传对象时传的是地址吗?
...全文
336 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
simoncn 2000-12-08
  • 打赏
  • 举报
回复
Java 对原始类型(Primitive)是传值,对其它类型(即对象)是传递指针。
String 类是只读对象。
参见:http://www.cn.ibm.com/developerWorks/java 中的
Java 应用程序中的按值传递语义
LittleBird 2000-11-11
  • 打赏
  • 举报
回复
kz网友说得对。
java里头的传递的是对象的地址(句柄),对象赋值时,java里的“地址”与C以及C++里的“地址”不太一样(这一点很容易混淆,特别是有C以及C++经验的同志)。
C或者C++中,
String szNew = new String("old");
szNew = "new";
这时, szNew的地址还是原来的地址,没有发生变化。
而在Java中
String szNew = new String("old");
szNew = "new";//相当于 szNew = new String("new");
szNew的地址已经发生了变化,String对象是只读的。

在最初的例子中,
调用changetonew(str2)之前,
str1和str2是指向同一个对象的,同一个对象的两个别名而已,地址是一样的。
在调用的函数changetonew中,
执行str1 = "new";后
str1指向的地址已经发生了变化,
而这个变化并不会引起原来的对象的另一个别名str2所指向的地址的变化,
这与C以及C++中的不同。
所以函数执行结束以后,
str2依然保持原来的地址不变,
输出的还是"old"。
lenyu 2000-11-07
  • 打赏
  • 举报
回复
Java传递的对象只是一个引用的实例。java中没有指针,str2=str1的时候,在c里面是复制了指针,而java里面是clone了对象
所以是不能用这样的办法传递参数回来的
用别的办法解决吧
虎叔 2000-11-07
  • 打赏
  • 举报
回复
I not wrong!
:-)
kz 2000-11-06
  • 打赏
  • 举报
回复
wlfjck说错了,Java传递的是地址,不是对象
robber也错了
是这样,由String声明的实例是只读实例,所以
String s1="old";
String s2=s1;
s2="new";
语句三:Java为s2分配了新的内存,所以执行语句三后s2!=s1(这是地址值不等)
String声明的实例是只读实例,这一点与C/C++不同--快给分!!!!
wlfjck 2000-11-05
  • 打赏
  • 举报
回复
你说的没错,Java对于对象的参数不是传地址,而是直接生成一个对象,我们可以将你的程序改写一下:
class Test
{
public void changetonew(String str1,String str3){

str1 = "new";
System.out.println(str1);
if(str1==str3)
System.out.println("yeah");
}

public void b(){
String str2 = "old";
changetonew(str2,str2);
System.out.println(str2);
}

public static void main(String[] args)
{
Test test_one=new Test();
test_one.b();
}
}

系统的输出没有"yeah",所以可以判定作为参数的str1,str3是不同的对象,他们都指向不同的地址!
虎叔 2000-11-04
  • 打赏
  • 举报
回复
String is a special class
crazyjava 2000-11-02
  • 打赏
  • 举报
回复
Java is always pass-by-value.

If u want to change the value of the parameter, there r some workarounds.
1) use array, vector and ect.
2) write your own class, make string, integer ... as data memebers

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧