Java基础篇:什么是值传递

深藏阁楼爱情的钟 2022-03-07 05:54 228阅读 0赞

Java类的结构的内存解析

内存分为4部分:栈、堆、方法区、静态域

栈:对象的引用名,数组的引用名,局部变量(方法的形参,方法内定义的变量,代码块中定义的变量)

堆:new 出来的”东西”(包括类的成员变量)

方法区:(含字符串常量池)

静态域:静态的field

" class="reference-link">watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjIzNjQwNA_size_16_color_FFFFFF_t_70

Java的参数传递机制

方法,必须有其所在类或对象调用才有意义。若方法含有参数:

形参:方法声明时的参数

实参:方法调用时实际传给形参的参数值

Java的实参值如何传入方法呢?

  1. Java里方法的参数传递方式只有一种:值传递。

值传递是指在调用函数时将实参复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。

  1. public class Test{
  2. public static void mian(String[] args){
  3. int x = 5;
  4. change1(x);
  5. Integer obj = 5;
  6. change2(obj);
  7. System.out.println(x); // 5
  8. System.out.println(obj); //3
  9. }
  10. public static void change1(int x){
  11. x = 3;
  12. }
  13. public static void change2(Integer obj){
  14. obj = 3 ;
  15. }
  16. }

无论是基本数据类型的参数传递还是引用数据类型的参数传递,都不会影响原来方法内的值。即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjIzNjQwNA_size_16_color_FFFFFF_t_70 1

注意:但我们要注意的是,虽然是值传递,但是引用数据类型指向的是同一块地址,如1中所示,change2()中的obj同样是可以操作5这块地址空间的。

  1. public class Main2 {
  2. public static void main(String args[]) {
  3. Cat cat = new Cat();
  4. cat.name="小白";
  5. System.out.println(cat.name); //小白
  6. changeName(cat);
  7. System.out.println(cat.name); //小黑
  8. }
  9. private static void changeName(Cat cat){
  10. cat.name="小黑";
  11. }
  12. }
  13. class Cat{
  14. String name;
  15. }

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjIzNjQwNA_size_16_color_FFFFFF_t_70 2

发表评论

表情:
评论列表 (有 0 条评论,228人围观)

还没有评论,来说两句吧...

相关阅读

    相关 什么传递和引用传递

           对象被值传递,意味着传递了对象的一个副本。因此,就算是改变了对象副本,也不会影响源对象的值。       对象被引用传递,意味着传递的并不是实际的对象,而是对象

    相关 java传递引用传递

    在Java中一切皆对象,无论是int a;还是String a;,这两个变量a都是对象。 在传递的时候究竟是按什么方式传递的呢?其答案就是:即是按值传递也是按引用传递,但通