• Java方法的参数是按值传递的.【转】


    在Java中,所有的方法参数,都是"按值传递".

    有那么一种说法,Java中基本类型是按值传递,对象是按引用传递.这个说法其实是不确切的,确切的说法是

    Java中基本类型将值作为参数,按值传递.对象将引用作为参数,按值传递.

    所谓按值传递,就是传递的是一个副本.

    现在来解释下Java方法传递引用时的情况.

    比如说有一个引用 Body body = new Body(.....);

    将body当作参数传递的时候,传递的不是body指向的对象,也不是body引用本身,而是body的一个副本,并且这个副本和body是一模一样.  这里的一模一样就是body和副本指向同一个对象.

    那么当body的副本进入方法后,对这个副本的修改同样会影响body.

    但是如果进入方法后将body的副本指向其它对象的时候,那么和body是一点关系都没有了.

    下面来看看程序就明白了.

    public class TestParam { 
        public static void main(String[] args) { 
            Body var1 = new Body(1); 
            Body var2 = var1; 
            doSomething( var2 ); 
            System.out.println( var1.a ); 
            System.out.println(var2.a); 
            System.out.print(var1 == var2); 
        } 
     
        public static void doSomething(Body body) { 
            body.a = 2; 
        } 
    } 
    class Body { 
        public Body(int a) { 
            this.a = a; 
        } 
        int a; 
    } 

    输出的结果是:

    2
    2
    true

    这个结果不难理解.

    public class TestParam { 
        public static void main(String[] args) { 
            Body var1 = new Body(1); 
            Body var2 = var1; 
            doSomething( var2 ); 
            System.out.println( var1.a ); 
            System.out.println(var2.a); 
            System.out.print(var1 == var2); 
        } 
     
        public static void doSomething(Body body) { 
            body = new Body(2); 
        } 
    } 
    class Body { 
        public Body(int a) { 
            this.a = a; 
        } 
        int a; 
    } 

    输出的结果是
    1
    1
    true

    两个程序就是在参数进入方法体之后的处理有所区别.

    针对第二个程序,画一个草图.

     

    文章来源:http://nileader.blog.51cto.com/1381108/303501

  • 相关阅读:
    Directx
    apr库开发
    linux 上編譯apache
    数字信号处理---FFT
    C# Parallel用法
    C#线程同步--线程通信
    C#线程同步--限量使用
    C#线程安全类型
    C# Task用法
    C# ThreadPool类(线程池)
  • 原文地址:https://www.cnblogs.com/macula/p/3468627.html
Copyright © 2020-2023  润新知