• 技术文章 >Java >java教程

    Java中值传递与引用传递之间的区别分析(附代码)

    不言不言2018-08-21 14:15:06原创1286
    本篇文章给大家带来的内容是关于Java中值传递与引用传递(地址传递)之间的区别分析(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

    值传递pass by value)是指在调用函数时将实际参数 复制 一份传递到函数中,这样在函数中如果对 参数 进行修改,将不会影响到实际参数。传递对象往往为整型浮点型字符型等基本数据结构。

    public class PassByValueReference {
    	//值传递
    	public static void main(String[] args) {
    		int x = 9;
    		pass(x);
    		System.out.println(x);
    	}
    	
    	private static void pass(int y) {
    		System.out.println(y);
    		y=0;
    	}
    }

    下为运行结果:(整型y的值变化没有影响整型x的值)

    引用传递(pass by reference)是指在调用函数时将实际参数的地址 直接 传递到函数中,那么在函数中对 参数 所进行的修改,将影响到实际参数。(类似于共同体) 传递对象往往为数组等地址数据结构。

    public class PassByValueReference {
            //引用传递
    	public static void main(String[] args) {
    		int [] x = {9};
                    System.out.println(x[0]);
    		pass(x);
    		System.out.println(x[0]);
    	}
    	
    	public static void pass(int [] y) {
    		y[0] = 0;
    	}
    }

    下为运行结果:(数组y的值变化同时影响数组x的值)

    (值传递与引用传递在计算机数据结构中用到了栈与堆的知识)

    另外,如果还没接触Java中的函数与方法相关知识的,可简单借助赋值理解:(运行结果与上面类似)

    public class PassByValueReference {
    	//值传递(赋值非函方式)
    	public static void main(String[] args) {
    	    int x = 9;
                System.out.println(x);
    	    y = x;
                y = 10;
    	    System.out.println(x);
    	}
    }

    这里x与y就是基本数据类型,赋值后把x的值传给了y,相当于是复制了一份副本,而不是把整个x(即x地址)给了y。

    public class PassByValueReference {
            //引用传递(赋值非函方式)
            public static void main(String[] args) {
    		int [] x = {1};
    		System.out.println(x[0]);
    		int [] y = x;
    		y[0] = 0;
    		System.out.println(x[0]);
    	}
    }

    这里x与y是数组,这次的代码中不是简单地令x[0]=y[0],而是直接令x=y,此赋值语句把x的数组地址都给了y,相当于是在“同一条船上”了,一起发生变化,y[0]变了同时x[0]也改变。

    相关推荐:

    Java值传递和引用传递详解

    java软件工程师学php -13. 值传递与引用传递

    以上就是Java中值传递与引用传递之间的区别分析(附代码)的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:值传递 引用传递
    上一篇:Java排序算法:冒泡排序的算法实现(代码) 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 一起来分析java设计模式之单例• Java数据结构之单链表与OJ题• 一文搞懂Java线程池实现原理• 详细介绍Java正则表达式之单字符匹配和预定义字符• Java总结分享之反射、枚举、Lambda表达式
    1/1

    PHP中文网