黑马程序员技术交流社区

标题: java是怎样传递参数的 [打印本页]

作者: 林兴才    时间: 2014-10-15 15:19
标题: java是怎样传递参数的
java是怎样传递参数的?by value或by reference?
作者: FlyFish    时间: 2014-10-15 15:50
都有。值传递+引用传递
作者: (づ ̄_3 ̄)づ    时间: 2014-10-15 16:37
基本类型是值,引用类型是地址
作者: Eric1225    时间: 2014-10-15 22:55
基本数据类型都是传值,而对象则是传递引用。而String比较特殊
作者: cs8630323    时间: 2014-10-16 11:31
FlyFish 发表于 2014-10-15 15:50
都有。值传递+引用传递

java只有值传递
作者: tiancairc    时间: 2014-10-16 16:50
传递参数有三种常见的:
1、指针,
2、引用传递
3、直接传值、
不过貌似最后一种没有什么利用价值。传了之后值前后不能保持一致
作者: 森屿北巷    时间: 2014-10-16 17:05
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是很纯的面向对象

作者: 无知的xiaopihai    时间: 2014-10-16 17:07
都有吧: 基本类型是值,引用类型是地址。
作者: 面具猴    时间: 2014-10-16 18:00
从C语言上来说有值传递和指针传递,还有一个与指针传递类似的叫引用传递,
但java中没有指针,且以引用作为指针的代替。
而C语言中的值传递传进函数后,在函数内的操作不会影响传入的变量的值,
这种方式用处不大,所以在java中默认都使用引用传递。
如果想要实现值传递的功能,就在传入的形式参数前加上final关键字
作者: 杨佳名    时间: 2014-10-16 18:29
森屿北巷 发表于 2014-10-16 17:05
输出的结果仍然是5,说明包装类作为参数传递时,仍是值传递,java是很纯的面向对象
...

java里面没有运算符重载,所以这个i = i + 2里面的+号会把i + 2的结果变成一个新的Integer对象,然后赋值给i,也就是i指向了新的变量 i并没有改变过。形参那个i本来指向main函数里的p 然后fun中i又指向了一个新的匿名对象 只改变了指向 没改变过对象本身




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2