A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© nerveva2000 中级黑马   /  2014-10-31 06:47  /  1973 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 nerveva2000 于 2014-11-2 11:11 编辑

基本数据类型参数传递


  1. class Demo
  2. {
  3. public static void main(String[] args)
  4. {

  5. int x = 3;
  6. show(x);
  7. System.out.println("x="+x);        //x=3;
  8. }
  9. public static void show(int x)
  10. {
  11. x = 4;
  12. }
  13. }
复制代码

引用数据类型参数传递
  1. class Demo
  2. {
  3. int x = 3;
  4. public static void main(String[] args)
  5. {
  6. Demo d = new Demo();
  7. d.x = 9;
  8. show(d);
  9. System.out.println(d.x);        //d.x=4;
  10. }
  11. public static void show(Demo d)
  12. {
  13. d.x = 4;
  14. }
  15. }
复制代码



评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

10 个回复

倒序浏览
x=4是局部变量 用完直接就消除了  d.x=4是指向了d对象中的x变量
回复 使用道具 举报
一个传递的是对象的引用,一个传递的是基础数据类型的副本。
操作对象的引用跟操作对象本身是一样的。(前提是这个引用一直指向这个对象,中途未改变。)
基础数据类型传递的都是副本,修改这个副本,对于基础数据原值毫无影响。

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 赞一个!

查看全部评分

回复 使用道具 举报 1 0
学习了~~~特意把代码写了一遍 跑起来看看
回复 使用道具 举报
恩,学习了。
回复 使用道具 举报
基础数据类型和引用数据类型是不同的。
回复 使用道具 举报
Eagle 高级黑马 2014-10-31 22:37:01
7#
第一个那个是没有修改到变量x的,show函数里只是把定义的局部变量赋值为4.与外面的x并没有联系。没有返回
回复 使用道具 举报
taambernk 来自手机 中级黑马 2014-11-2 07:03:14
8#
按值传递传递的是值的拷贝,按引用传递传递的是引用的地址值
回复 使用道具 举报
Mr.JUN 中级黑马 2014-11-2 12:37:23
9#
画下内存图就可以了
回复 使用道具 举报
基本数据类型:传递的值数据类型的副本,不是原来的值
引用类型传递:传递的是对象的地址,但改变对象的值时,因为操作的是同一个对象,原来变量也还是引用同一个对象,通过原来变量访问对象的时候那就是访问了被更改的值了
回复 使用道具 举报
本帖最后由 桃华月禅 于 2014-11-2 18:50 编辑

我感觉只要把引用show()方法时都想成这样-


    1. public static void show(int x)   //int x = x 把3赋值给x,这样就很好理解了!其实就是这个老犯糊涂,我只这样认为的
    2. public static void show(Demo d)  //Demo d = d 把上边那个变量d赋值给这个新Demo类型的变量
    复制代码

我当时就这样理解的,感觉蛮顺利的。

其实就是
1、前边那个是把一个局部变量x赋值给另一个局部变量x,两者没有任何关系,当然其中一个值改变,另一个不会受影响。
2、后边那个是把一个堆内存中的一个对象赋值给两个局部变量d,无论修改哪个d,都会改变引用变量d指向的对象。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马