zoukankan      html  css  js  c++  java
  • 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 引用类型:

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

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

    运行结果:

     

  • 相关阅读:
    主席树模板之区间问题
    简易版第k大(权值线段树+动态开点模板)
    Irrigation
    Petya and Array
    H. Pavel's Party(权值线段树)
    权值线段树入门
    位数差(二分)
    ZYB's Premutation(树状数组+二分)
    单调队列入门
    javaBean为什么要implements Serializable?
  • 原文地址:https://www.cnblogs.com/zslb/p/9263809.html
Copyright © 2011-2022 走看看