• (转)java 中的 传值 与 传址


    在一些面试企业的过程当中 ,很多人看重于基础的考核。其中,传值与传地址 就是一种基础能力考核的关键,这里我总结了 5种很典型的例子 ,最后做了一个总结

    • 首先是8种基本数据类型 下面用 int 类型 做例子 属于传值
    public static void method1(int i)
        {
    
            i= i+10;
            System.out.println("在方法内的值"+i);
        }
    public static void main(String[] args) {
            int i =5;
            method1(i);
            System.out.println("调用之后的值"+i);
        }
    

    调用结果如下 
    在方法内的值15 
    调用之后的值5

    • 接下来是一个比较特殊的类型 引用数据类型

    Integer Long Boolean Byte Character Double Float Short 
    这几种数据类型 也是传地址 但是它比较特殊 可以理解为“传值”

    public static void method2(Float i)
        {
    
            i= i+10;
            System.out.println("在方法内的值"+i);
        }
    public static void main(String[] args) {
    
            Float i =1.11f;
            method2(i);
            System.out.println("调用之后的值"+i);
            }

    调用结果如下 
    在方法内的值11.11 
    调用之后的值1.11

    • 下面又是一个比较特殊的 字符串常量 String
    public static void method3(String i)
        {
    
            i= i+"world";
            System.out.println("在方法内的值    "+i);
        }
    
    public static void main(String[] args) {
    
    
            String a ="你好";
            method3(a);
            System.out.println("调用之后的值   "+a);
        }

    调用结果如下 
    在方法内的值 你好world 
    调用之后的值 你好

    • 下面一个是数组 传址
    public static void method4(String[] i)
        {
    
            i[0]="三";
        }
    public static void main(String[] args) {
            String [] a = new String[2];
            a[0]="一";       a[1]="二";
    
            for(int j = 0; j < a.length; j++){
                System.out.print(a[j] + "  ");
            }
            method4(a);
            System.out.println( "  ");
    
            for(int j = 0; j < a.length; j++){
                System.out.print(a[j] + "  ");
            }
        }

    调用结果如下 
    一 二 
    三 二

    最后一个 也是我们应用最多的一个 就是 对象 传址

    public class Demo {
    
        public int ii =0;
    
        public Demo(int ii) {
    
            this.ii =ii;
        }
    
    }
    public static void method5(Demo i)
        {
            i.ii+=10;
        }
    public static void main(String[] args) {
            Demo deo = new Demo(6);
            method5(deo);
            System.out.println("调用之后的值   "+deo.ii);
    
    }

    调用结果如下 
    调用之后的值 16

    传值 传的是基本类型 通过参数传递给方法, 传的是值的拷贝 
    所以 函数体内的值的变化,不会影响函数体外的值

    如果传入的是解百纳类型包装类的引用,传的仍然是值的拷贝 
    

    传地址 传入的是对象的引用,通过参数传给方法,传的是地址的拷贝 
    如果在函数体内,改变传入地址所指向的对象数据,会影响函数体外的对象。这个事情可以这么去理解 ,我把地址的内存 传给了方法 方法改变了内存中的内容,所以指向它的引用的值 自然都会改变。

  • 相关阅读:
    HDU1325 Is It A Tree? (并查集判断有向图是否是树)
    DRF 视图家族及路由层补充
    DRF 外键字段深度查询优化、ListSerializer辅助完成群改
    DRF的orm多表关系补充及serializer子序列化
    DRF序列化
    DRF的封装:APIView类及五大模块
    DRF简介/接口概念
    vue-axios插件、django-cors插件、及vue如何使用第三方前端样式库:element/jQuery/bootstrap
    Vue项目的创建、路由、及生命周期钩子
    Vue框架-组件的概念及使用
  • 原文地址:https://www.cnblogs.com/whf-Staring/p/6534232.html
Copyright © 2020-2023  润新知