为什么是1不是3??

kiver149 2008-08-05 10:30:33

public class Test {

public static void main(String[] args) {
ClassA c = new ClassA();
Test cm = new Test();
c.i=1;
cm.revalue(c);
System.out.println(c.i);
}
public void revalue(ClassA c) {
ClassA d = new ClassA();
d.i=2;
c=d;
d.i=3;
}
}
class ClassA {
int i=0;
}

请帮忙解释下吧。。谢谢了
...全文
373 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
kiver149 2008-08-29
  • 打赏
  • 举报
回复
晕死忘记结贴了
谢谢大家了
zclc11 2008-08-08
  • 打赏
  • 举报
回复
我不懂 我也来学习一下
时光瞄 2008-08-07
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 yirentianran 的回复:]
Java codepublicclassTest {publicstaticvoidmain(String[] args) {
ClassA c=newClassA();
Test cm=newTest();
c.i=1;
cm.revalue(c);
System.out.println(c.i);
}publicvoidrevalue(ClassA cCopy) {
ClassA d=newClassA();
d.i=2;
cCopy=d;
d.i=3;
}
}classClassA {inti=0;
}
值传递
经典啊,简简单单几句话我就明白了,谢谢,

public void revalue(ClassA ccopy)

这…
[/Quote]
magicxin031 2008-08-07
  • 打赏
  • 举报
回复
java参数传递-按值传递,即Java中传递任何东西都是传值。如果传入方法的是基本类型的东西,你就得到此基本类型的一份拷贝。如果是传递引用,就得到引用的拷贝。
大家的几个例子~不错~不错,哈哈
fengyuleidian3 2008-08-07
  • 打赏
  • 举报
回复
只要搞清楚内存的具体的分局情况就容易理解了。
内存的布局是这样的:
code segment :存放代码(比如:还没有调用的method等);
data segment :存放静态常量和字符串常量;
stack :局部变量(比如:8中基本的数据类型,引用);
heap : 动态申请的内存(对象)。
xhh_1986178185 2008-08-07
  • 打赏
  • 举报
回复
自学中,还不太明白
YH555 2008-08-07
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 duanjianbo26 的回复:]
引用 18 楼 lxxzhy 的回复:
引用 17 楼 Geomatic 的回复:
引用 14 楼 tigoal 的回复:
黄飞鸿在广东开了家宝芝林,卖中药。它用同样的牌子在美国开了一家分店。
美国宝芝林分店里不仅卖中药,还卖西药。
那现在问你,在在广东的宝芝林里,卖的是什么药?

好经典~~~

其实这样理解不准确,容易误导人...

可以这样认为:
你买回来一台电视机A,有一个遥控a.拿遥控a去复制一个遥控b,那么现在a b都可以控制电视…
[/Quote]
duanjianbo26 2008-08-07
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 lxxzhy 的回复:]
引用 17 楼 Geomatic 的回复:
引用 14 楼 tigoal 的回复:
黄飞鸿在广东开了家宝芝林,卖中药。它用同样的牌子在美国开了一家分店。
美国宝芝林分店里不仅卖中药,还卖西药。
那现在问你,在在广东的宝芝林里,卖的是什么药?

好经典~~~

其实这样理解不准确,容易误导人...

可以这样认为:
你买回来一台电视机A,有一个遥控a.拿遥控a去复制一个遥控b,那么现在a b都可以控制电视机A了,但是当你
ClassA d =…
[/Quote]
正解
wl058t22034 2008-08-07
  • 打赏
  • 举报
回复
看看参数传递的知识点吧
dudenglan 2008-08-07
  • 打赏
  • 举报
回复
public class Test {

public static void main(String[] args) {
ClassA c = new ClassA();
Test cm = new Test();
c.i=1;
cm.revalue(c);
System.out.println(c.i);//这个是对象ClassA c
}
public void revalue(ClassA c) {
ClassA d = new ClassA();
d.i=2;
c=d; //此处你是更改的classA d与上面的无关!
d.i=3;
}
}
class ClassA {
int i=0;
}
dln1234 2008-08-07
  • 打赏
  • 举报
回复
传值的作用范围不同导致结果不同!!!!
weird501 2008-08-07
  • 打赏
  • 举报
回复
java中的对象变量都是存在栈中的指向堆中具体对象的引用(相当于C的指针)。当主函数main中的对象引用c传递到方法revalue中时,其实是拷贝了一个和c一样的对象引用。在revalue中,并没有对c指向的对象进行改变,而只是把revalue中拷贝的c引用指向另外一个在revalue中创建的对象,其后还对这个新创建的对象进行了改变,但与main中的c指向的对象没有关系,而且方法运行结束后新创建的对象也会丢失。所以呢,main中的c指向的对象的属性值仍然是1,那么输出当然也是1了。
rypgood 2008-08-07
  • 打赏
  • 举报
回复
c=d;
无效
whl113 2008-08-06
  • 打赏
  • 举报
回复
按值传递,所以在mian方法C的值是不会受revalue方法影响的。
sw6101269_163 2008-08-06
  • 打赏
  • 举报
回复
值传递问题
ZangXT 2008-08-06
  • 打赏
  • 举报
回复
的确遥控器这个例子比较经典。
lxxzhy 2008-08-06
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 Geomatic 的回复:]
引用 14 楼 tigoal 的回复:
黄飞鸿在广东开了家宝芝林,卖中药。它用同样的牌子在美国开了一家分店。
美国宝芝林分店里不仅卖中药,还卖西药。
那现在问你,在在广东的宝芝林里,卖的是什么药?

好经典~~~
[/Quote]
其实这样理解不准确,容易误导人...

可以这样认为:
你买回来一台电视机A,有一个遥控a.拿遥控a去复制一个遥控b,那么现在a b都可以控制电视机A了,但是当你
ClassA d = new ClassA();
c=d;
复制的遥控b只能控制电视机B(因为此时b重新指向一台新的电视机B),所以在b上做的操作只影响电视机B,而不影响电视机A.
GeomaticMm 2008-08-06
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 tigoal 的回复:]
黄飞鸿在广东开了家宝芝林,卖中药。它用同样的牌子在美国开了一家分店。
美国宝芝林分店里不仅卖中药,还卖西药。
那现在问你,在在广东的宝芝林里,卖的是什么药?
[/Quote]
好经典~~~
yangchao_713 2008-08-06
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 lujunjsp 的回复:]
引用 6 楼 sasgsc 的回复:
汗死了,拿编译器跟了半天才想清楚,public ClassA revalue(ClassA c),这句话其实是初始化了一个C引用,将参数传进去的时候,只是将外面的C引用给了内部的C引用,C=D,又将原本指向外部C所指向的地址改成了D所指的引用,所以,外部的C的指向和所指向的值其实是没变的....汗死了.......
[/Quote]
lujunjsp 2008-08-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sasgsc 的回复:]
汗死了,拿编译器跟了半天才想清楚,public ClassA revalue(ClassA c),这句话其实是初始化了一个C引用,将参数传进去的时候,只是将外面的C引用给了内部的C引用,C=D,又将原本指向外部C所指向的地址改成了D所指的引用,所以,外部的C的指向和所指向的值其实是没变的....汗死了.......
[/Quote]
加载更多回复(15)
 课程目标:你将对研发框架的代码封装和开发规范制定的底层实现逻辑有所掌握,并形成自己的开发封装套路,告别CRUD课程简介:   1. 课程背景: 能帮你解决什么问题?企业中通常由架构师搭建好开发框架,里面包含了很多封装好的基础结构,日志规范以及响应的异常统一处理,还有相应的参数校验等。很多初中高级开发工程师没有机会接触这部分代码的逻辑,而这部分代码逻辑又是非线性的,单纯看代码逻辑是看不出来执行顺序的,需要大量调试总结。不像mvc代码结构,你知道从Controller层看到Service再到Dao层,而这样底层的基础性代码则像积木,不熟悉的前提下需要一块块的插入拔出,不断总结,而沿着本课程的顺序梳理与实战你将会豁然开朗。市面上的大多文章结构较散,并且处理不够全面,比如返回结构通常是 具体的正例与反例日志统一处理 统一异常处理及特殊的情况处理 参数优雅校验 1基础的校验 2. 自定义校验 3.分组校验最重要的是给大家捋顺了一个清晰的实现结构以上在我们后面章节Spring Boot HelloWorld的至少10个可扩展点里有更多的相关介绍,在核心章节里有更细致的讲解实现。理解框架升级底层逻辑: 全网首套基于Spring Boot 3.x+Java 17开发系列 SpringBoot3的升级背景和路线逻辑掌握代码重构及编码效率提升技巧学习基于最为前沿的Spring Boot 3.x 和 Java 17 开发代码依赖于Spring Boot 3.x Java 17环境开发穿插相应新版本的变化讲解可编写完成一个生产级开发规范框架的制定 包含不限于 统一响应结构统一异常处理基于ThreadLocal处理请求RequestId基于日志框架的MDC 统一记录日志统一状态码处理Filter中的异常及状态码处理,以及日志的完整性处理自定义优雅参数校验学习源码剖析方式方法等等 3. 课程规划1.  课程章节规划 2. 讲课方式代码实战为主+图文演示为辅例如说明后端校验的重要性 以一张图清晰明了的展示说明解答了为何前端有了前端校验还要后端校验的问题 3. 特别说明本课程所有代码使用版本会随着Spring Boot 3.x的开发进度而更新,直到Spring Boot 3.x的正式版本发布,可放心食用本课程的重点会侧重放在研发框架的基础规范编码上,并非专注于SpringBoot3.x和Java17的新特性上讲解。主要是两点原因,1课程的方向侧重点, 2. SpringBoot3.x 官方尚处于MileStone/Snapshot版并未Release,所以大家可关注本人编程燃风后续的产品课程。本课程代码同样适用于Spring Boot 1.x 2.x 只需微调API和相关库版本的即可(注意1.x已经归档不维护) 常见问题:问:是否讲解Java17和SpringBoot3新特性答:本课程的重点会侧重放在研发框架的基础规范编码上,并非专注于SpringBoot3.x和Java17的新特性上讲解。主要是两点原因,1课程的方向侧重点是框架基础规范编码实战 2. SpringBoot3.x 官方尚处于MileStone/Snapshot版并未Release,所以大家可关注本人编程燃风后续的讲解课程。问:代码仅限于SpringBoot3吗? SpringBoot2和SpringBoot1是否适用?答:本课程代码同样适用于Spring Boot 1.x 2.x 只需微调API和相关库版本的即可(注意1.x已经归档不维护)。另外本课程重点讲解代码封装和底层实现逻辑和具体API版本关联不大,只是基于最新的SpringBoot3和Java17实现而已,请放心使用。
适合人群:JAVA开发者、企业管理者、技术经理、技术团队负责人学习计划:1、建议每天学习2~3节,一周可以轻松学完。 2、下载课程资料、参照视频完成编码联系,并在笔记中记录学习心得。 3、在实际工作中加以实践,很快就会提高软件开发质量。课程目标:你将对单元测试有深刻的认识,并掌握单元测试框架的使用和原理,在工作中快速提高程序质量。课程简介:为什么要学习本门课程?1、程序员大量的时间并不是耗费在需求的开发上,而是花费在多次的程序返工上。2、不断的在修复问题的同时又引入新的问题,开发质量难以把控,让别人对自己失去信心。3、系统堆积的代码越来越多,不敢轻易改动程序,修改了一处不知道会影响哪里,每次上线都提心吊胆。4、很多程序员不爱写单元测试,认为那是在浪费时间,其实自己花费了更多的时间反反复复的修改问题。 课程特点是什么?1、大厂架构师亲身总结,根据多年管理经验、实际编码经验,带来最真实有效的解决方案。2、不是只讲框架的使用,而是站在更高的视角审视单元测试的必要性,让你明白为什么必须要单元测试。3、通过本套课程的学习,企业和个人都可以切身有效的快速提高程序质量。4、本套课程提供了技术方案的同时,更加是提供了一套工作的流程和管理规范。5、实战化代入,让你从零掌握主流的单测框架和断言,用插件提高工作效率,用覆盖率进行质量闭环。 授课风格怎么样?1、不装腔作势,没有故作高深,就是以一个技术人的视角,在将专业的知识。2、课程中加入自己的经验总结、更加接地气。 配套福利有什么?1、课程配套源码,可直接部署和对照练习。

62,614

社区成员

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

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