java值传递 和 引用传递

关于Java传参时是引用传递还是值传递有很多讨论
有论坛说Java中只有值传递,也有些地方说引用传递和值传递都存在,比较容易让人迷惑

先上代码(自己先猜猜看结果)

package io.renren.utils;

import java.util.HashMap;
import java.util.Map;

public class testUtils {



    public static  void main(String[] args){
        Map<String, String> map = new HashMap<String, String>();
        Student student = new Student();
        student.setName("000000");
        map.put("aaaa", "000000");
        int a = 1111;
        System.out.println(a);
        System.out.println("map:"+map.get("aaaa"));
        System.out.println("student:"+student.getName());
        setValue0(a);
        System.out.println("setValue0:"+ a);
        setValue(map);
        System.out.println("setValue:"+map.get("aaaa"));
        setName(student);
        System.out.println("setName:"+student.getName());
        setName1(student);
        System.out.println("setName1:"+student.getName());
    }

    private static void setName1(Student student) {
        student = new Student();
        student.setName("000000");
    }

    static void setValue0(int a){
        a = 00000;
    }

    static void setValue(Map<String, String> map){
        map.put("aaaa", "1111111111");
    }

    static void setName(Student map){
        map.setName("1111111111");
    }


   static class Student{
        private String name;


        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }
}

 分析结论

1 基本类型作为参数

  首先:基本数据类型在声明时系统就给它分配空间:

  其次:方法调用时,实际参数把它的值传递给对应的形式参数,函数接收的是原始值的一个copy,此时内存中存在两个相等的基本类型,即实际参数和形式参数,后面方法中的操作都是对形参这个值的修改,不影响实际参数的值。

2 引用类型:

  首先:引用则不同,它声明时只给变量分配了引用空间,而不分配数据空间

  其次:在方法执行中,形参和实参内容相同,指向同一块内存地址,方法执行中对引用的操作将会影响到实际对象

运行结果:

 

原文地址:https://www.cnblogs.com/zslb/p/9263809.html