美文网首页
JAVA中方法参数传递方式是值传递还是引用传递 ?

JAVA中方法参数传递方式是值传递还是引用传递 ?

作者: Android_开发工程师 | 来源:发表于2020-12-15 15:49 被阅读0次

先上结论(带着结论往下看):

java中方法参数传递方式是 按值传递。
如果参数是基本类型,传递的是基本类型的字面量值的拷贝。
如果参数是引用类型,传递的是该参量所引用的对象在堆中地址值的拷贝。

1、搞清楚 基本类型 和 引用类型的不同之处

int num = 10;
String str = "hello";

2、赋值运算符(=)的作用 :

为了大家更好理解,赋值语句,你可以从右往左看

int num = 10;
String str = "hello";

num = 20;
str = "java"; // 把 “java”对象地址赋值给 str
image.png

3、实参与形参

public static void main(String[] args){
}  

这里面的 args就是参数 。参数再程序语言中分为形式参数和实际参数 。

形式参数 :

是在定义函数的时候 ,使用的参数 ,目的是用来接收调用该函数时传递的参数 。

实际参数 :

在调用有参函数时,主调用函数和被调用函数之间有数据传递关系 在主调用函数中调用一个函数时,函数名后面的参数成为: 实际参数。

4、Java方法本质 :

当我们调用某个java方法时,实际上是线程调用了它私有的虚拟机栈,将方法作为一个栈帧将其压入虚拟机栈中。
栈帧中存放着局部变量表(即该java方法中的局部基本类型变量、引用对象指向堆的地址)、
操作数栈(用于计算的临时数据存储区,相当于栈帧里面又有一个栈,这个栈的入栈出栈主要用作计算)、
动态链接、方法出口。

它本质是一个内存区块,里面存储着方法的数据集。一个方法从开始执行到执行完毕其实就对应该栈帧的入栈到出栈的过程。

上代码 :

 public static void main(String[] args) {

       List<Integer> list = new ArrayList<Integer>();
       for (int i = 0; i < 10; i++) {
           list.add(i);
       }
       add(list);
       for (Integer j : list) {
           System.err.print(j + ",");
           ;
       }
       // 0,1,2,3,4,5,6,7,8,9,100,
       System.err.println("");
       System.err.println("*********************");

       String a = "A";
       append(a);
       System.err.println(a); // A

       int num = 5;
       addNum(num);
       System.err.println(num);  // 5

   }

   static void add(List<Integer> list) { 
// list 是实参list 地址的拷贝,都是指向堆内存中的对象
       list.add(100); // 调用堆中对象的方法
   }

   static void append(String str) { // "A" str = Ox1111 拷贝
       str += " is a";  
// "A is a " 新对象, 地址为: Ox1112 ,赋值语句,把地址Ox1112给到形参 str
       System.err.println("append str : " + str); 
//append str : A is a
   }


   static void addNum(int a) {  // 值 5 的拷贝
       a = a + 10;    // 5+10 = 15 , 赋值给形参 a
       System.err.println("addNum a :" + a); // addNum a  = 15
   }
}

(以上内容是为了大家方便理解,有些地方不是很准确,还请指教)
参考知乎: https://www.zhihu.com/question/31203609

相关文章

  • JAVA是按值传递还是按引用传递

    java中对象作为参数传递给一个方法,到底是值传递,还是引用传递? String和int参数传递是按值传递还是引用...

  • Java 参数的传递

    Java 的参数是值传递,不是引用传递 Java 中只有值传递,方法按值调用(call by value)。也就是...

  • java 参数传递

    java中方法参数传递方式是按值传递。 如果参数是基本类型,传递的是基本类型的字面量值的拷贝。 如果参数是引用类型...

  • java中的参数传递(只有值传递没有引用传递)

    Java中只有传值调用(值传递),没有传址调用(址传递或者引用传递)。所以在java方法中改变参数的值是不会改变原...

  • 解决java中的参数传递问题

    Java中只有传值调用(值传递),没有传址调用(址传递或者引用传递)。所以在java方法中改变参数的值是不会改变原...

  • C语言 函数传参的理解

    C语言有点东西 不像JAVA 不需要复杂考虑参数传递问题 java就两种参数传递方式 值传递AND引用传递...

  • java SE

    问题一:Java中是引用传递还是值传递? 值传递:将方法实际参数值复制到另一个变量,然后复制的对象被传递,这就是为...

  • 形象理解java中的值传递和引用传递

    概述 java中的方法传参, 主要通过值传递和引用传递的方式传递参数 首先我们定义一个ListNode类 然后我们...

  • 聊聊Java内部类

    一.磨叽磨叽Java值传递与引用传递 “在Java里面参数传递都是按值传递”即:按值传递是传递的值的拷贝,按引用传...

  • 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性

    是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用...

网友评论

      本文标题:JAVA中方法参数传递方式是值传递还是引用传递 ?

      本文链接:https://www.haomeiwen.com/subject/yfewgktx.html