• 参数传递(值传递与引用传递)


    按值传递和按引用传递。按值传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的一个副本。因此,如果函数修改了该参数,仅改变副本,而原始值保持不变。按引用传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的内存地址,而不是值的副本。因此,如果函数修改了该参数,调用代码中的原始值也随之改变。

    1、对象是按引用传递的
    2、Java 应用程序有且仅有的一种参数传递机制,即按值传递(引用传值传递的是原始值的内存地址,其实也是一种按值传递)
    3、按值传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的一个副本
    4、按引用传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的内存地址,而不是值的副本

    复制代码
     1 public class ParamterE2 {
     2     
     3     public static class ParamterE3{
     4         public String name="xiaotiaosi";
     5     }
     6     
     7     public static void run(ParamterE3 paramterE3,String a,int b){
     8         ParamterE3 paramterE=paramterE3;
     9         paramterE.name="xiaohua111";
    10         a="girl";
    11         b=1;
    12     }
    13  
    14     public static void main(String[] args) {
    15         ParamterE2 paramterE2=new ParamterE2();
    16         ParamterE3 paramterE3=new ParamterE3();
    17         String a="boy";
    18         int b=0;
    19         paramterE2.run(paramterE3,a,b);
    20         System.out.println(paramterE3.name+" "+a+" "+b);
    21     }
    22 }
    复制代码

    程序运行的结果为:xiaohua111 boy 0

    原始对象内的成员变量name的值改变,原始String类型的变量a 和原始int类型的变量b值没有发生改变。

    说明:

    1.对象就是传引用
    2.原始类型就是传值(boolean 、char、byte、short、int、long、float、double)
    3.String类型因为没有提供自身修改的函数,每次操作都是新生成一个String对象,所以要特殊对待。可以认为是传值。

    注:通过查资料发现String类型比较特殊,在Java中,String是一个引用类型,但是在作为参数传递的时候表现出来的却是基本类型的特性。
    查过相关资料后我觉得是两个原因导致的,一个是String实际上操作的是char[],可以理解为String是char[]的包装类。二是给String变量重新赋值后,实际上没有改变这个变量的值,而是重新new了一个String对象,改变了新对象的值,所以原来的String变量的值并没有改变。

  • 相关阅读:
    WebForms和MVC之间的抉择
    RPM install Error: Failed dependencies
    存储NAS和SAN
    python基础31[visualstudio2010来编写python程序]
    Linux系统性能检测
    perl的引用和>
    Linux内存高级 [swap/buffer]
    python类库26[web2py的URL映射]
    python类库31[python的libpath]
    VShpere中创建新Linux(ubuntu)的virtual machine
  • 原文地址:https://www.cnblogs.com/yulei126/p/6757558.html
Copyright © 2020-2023  润新知