java类赋值问题!

------------------------------------------以下是代码区域------------------------------------... ------------------------------------------以下是代码区域---------------------------------------------------------------
public class zhichuandi {
public static void main(String[] args) {
C c = new C();
System.out.println(c.i);
c.seti(10);
System.out.println(c.i);
fun(c);
System.out.println(c.i);
}

static void fun(C c)
{
C cc = new C();
System.out.println("cc"+cc.i);
c = cc;

}
}
class C
{
int i = 15;
void seti(int x)
{
i = x;
}
};
------------------------------------------以上是代码区域---------------------------------------------------------------
输出是:
15
10
cc15
10

为什么fun执行完后c的仍然是10,没有变成15呢?
展开
 我来答
歪瑞顾K
2013-12-17 · TA获得超过2905个赞
知道大有可为答主
回答量:2731
采纳率:33%
帮助的人:2201万
展开全部
如果是在C语言或者C++里面,你的疑惑都是最基础的知识,也比较好解释。但是java里面,不好解释这个问题,因为很多概念,java语言给你隐藏了的。

比如说 static void fun(C c){} 这个函数被调用的时候,实际上,传递过来的是 c对象的内存地址。内存地址是一个特殊的变量,它的长度和当前机器位宽有关,如果是32机器,那它就是个32位整数,即最大为0xFFFFFFFF的一个数字。

比如 C c1 = new C() ; fun(c1); 这两句代码执行的时候,在fun内部的c和外面的c1 实际上是两个不同的引用变量,只不过它引用的是同一个对象。对应底层内存的解释即,c和c1它们是两个内存地址变量,它们存防的都是同一个地址,即对象 c1对象的地址。总的来说就是两个引用变量本身是不同的,但它们引用的却是同一个对象。

如果想学好java,建议还是从C学起,很多概念,比如堆栈,地址,引用(指针),引用拷贝,值拷贝这些都可以有深入的了解。学C和java并不矛盾,只不过C在很多概念上对学习者透明,也有比较多的文档可以了解,而java方面则没有这么多教程。。

学C 就像学造房子的人从怎么生产砖瓦开始。
学java就像学早房子,一上来就给你讲房子的美观,布局,以及通风采光。所以就容易产生这些疑惑
追问
恩  我学过C的 执行fun(c);时   c是地址传到,所以在fun函数对c的改变都应该会影响main函数中的c,但是不知为什么返回去后还是没变
追答
static void fun(C c) {  C cc = new  C();  System.out.println("cc"+cc.i);  c = cc;  //注意,这里,这里。。这里给c赋值,只是局部变量 c的值改变了,并没有改变最外面的那个fun(c); 中的c的值。  如果你想知道java中的引用变量的实际值,可以这样, 比如 Object obj 它的 obj.hashCode()将返回一个 int值,它是一个类似的地址的东西。你可以在调用func(c) 之前和只后,赋值的前后,打印 c的 hashCode观察具体变化。另外,像把代码发出来问问题,你的变量名要讲究点,别全都是c,人都不好给你说是哪个c。
对了,某些特殊的类会重载 hashCode函数,比如String,它的hashCode 是另一种含义。 }
zy562358446
2013-12-17 · 超过15用户采纳过TA的回答
知道答主
回答量:39
采纳率:100%
帮助的人:19.7万
展开全部
你这只是在中间执行了一个方法而已,肯定不能改变c的值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-12-17
展开全部
你的c是在main函数里面定义的,只在main函数里面有用,在fun()函数里面没有意义吧,c=cc这句话有问题吧
追问
没有问题  我试了的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式