帮我看看对象的引用这两段代码

a384311712 2013-01-23 08:46:12
package string;

public class yinyongto {
public static void main(String[] args) {
String str="hello";
fun(str);
System.out.println(str);
}
public static void fun(String temp)
{
temp="world";
}
}

结果是hello


下一段是
package string;
class demo
{
int x=10;
}
public class index {
public static void main(String[] args) {
demo d= new demo();
d.x=30;
fun(d);
System.out.println(d.x);
}
public static void fun(demo temp)
{
temp.x=100;
}

}
结果是30 我想说为什么上一个的结果不是world temp不能修改了内容断开连接么

...全文
149 8 点赞 打赏 收藏 举报
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
BadPattern 2013-01-23
引用 6 楼 lyyslsw 的回复:
一楼正解,java里面所有东西都是可以看做对象的。而对对象的使用是通过引用的。这里的引用不同于c++ 的引用。有些类似于指针。
这点说的有误,java中基本类型是值语义,类类型只有引用语义,无法获取对象本身,所以不是所有东西都看做是对象。 C++中才可以把所有东西说是对象,effective C++中描述基本数据类型,引用类型,指针类型,包括对象本身都叫"对象",这是因为一切事物都有值语义,也都可以通过new 来创建引用语义。
  • 打赏
  • 举报
回复
Johnblx 2013-01-23
一楼正解,java里面所有东西都是可以看做对象的。而对对象的使用是通过引用的。这里的引用不同于c++ 的引用。有些类似于指针。
  • 打赏
  • 举报
回复
xulqif 2013-01-23
引用 2 楼 abc41106 的回复:
所以第二个结果应该是100,楼主怎么说是30呢?
这个正解
  • 打赏
  • 举报
回复
笑莫问 2013-01-23
引用 2 楼 abc41106 的回复:
所以第二个结果应该是100,楼主怎么说是30呢?
+1 第一个值传递,第二个引用传递。
  • 打赏
  • 举报
回复
BadPattern 2013-01-23
传递String的那个,在方法体中修改了引用的拷贝到另一个指向,原引用没有变化
  • 打赏
  • 举报
回复
abc41106 2013-01-23
所以第二个结果应该是100,楼主怎么说是30呢?
  • 打赏
  • 举报
回复
abc41106 2013-01-23
分清对象和对象引用的概念 1.对引用的操作 调用方法fun(str);时 str是实参,temp是形参,二者引用的是同一个String对象 对temp赋值,只是让它指向了其他对象,这不会影响str。 2.对所引用的对象的操作 调用方法fun(d);时 d是实参,temp是形参,二者引用的是同一个demo对象 所以temp.x就是d.x,改变temp.x就是改变了d.x
  • 打赏
  • 举报
回复
a384311712 2013-01-23
对第二个是100是我搞错了
  • 打赏
  • 举报
回复
相关推荐
发帖
Java SE
加入

6.2w+

社区成员

Java 2 Standard Edition
申请成为版主
帖子事件
创建了帖子
2013-01-23 08:46
社区公告
暂无公告