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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 林兴才 中级黑马   /  2014-10-15 15:19  /  1875 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

java是怎样传递参数的?by value或by reference?

评分

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

查看全部评分

9 个回复

倒序浏览
都有。值传递+引用传递
回复 使用道具 举报
基本类型是值,引用类型是地址
回复 使用道具 举报
基本数据类型都是传值,而对象则是传递引用。而String比较特殊
回复 使用道具 举报
FlyFish 发表于 2014-10-15 15:50
都有。值传递+引用传递

java只有值传递
回复 使用道具 举报 1 0
传递参数有三种常见的:
1、指针,
2、引用传递
3、直接传值、
不过貌似最后一种没有什么利用价值。传了之后值前后不能保持一致
回复 使用道具 举报
Eric1225 发表于 2014-10-15 22:55
基本数据类型都是传值,而对象则是传递引用。而String比较特殊
  1. public static void fun(Integer i){
  2. i=i+2;
  3. }
  4. public static void main(String[] args) {
  5. Integer p=new Integer(5);
  6. fun(p);

  7. System.out.println(p);
复制代码

输出的结果仍然是5,说明包装类作为参数传递时,仍是值传递,java是很纯的面向对象
回复 使用道具 举报
都有吧: 基本类型是值,引用类型是地址。
回复 使用道具 举报
从C语言上来说有值传递和指针传递,还有一个与指针传递类似的叫引用传递,
但java中没有指针,且以引用作为指针的代替。
而C语言中的值传递传进函数后,在函数内的操作不会影响传入的变量的值,
这种方式用处不大,所以在java中默认都使用引用传递。
如果想要实现值传递的功能,就在传入的形式参数前加上final关键字

评分

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

查看全部评分

回复 使用道具 举报 1 0
森屿北巷 发表于 2014-10-16 17:05
输出的结果仍然是5,说明包装类作为参数传递时,仍是值传递,java是很纯的面向对象
...

java里面没有运算符重载,所以这个i = i + 2里面的+号会把i + 2的结果变成一个新的Integer对象,然后赋值给i,也就是i指向了新的变量 i并没有改变过。形参那个i本来指向main函数里的p 然后fun中i又指向了一个新的匿名对象 只改变了指向 没改变过对象本身
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马