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


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

    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类的实现,String类是通过private final char value[]数组实现的,从给的数组我们能够发现这个char[]数组使用了final关键字修饰,也就意味着,这个String类型的对象不可变,那么就有人要问了,既然不可变,那么我们如何修改字符串的值喃?例如:String str="xiaotiaosi321";如何将已创建的字符串对象修改成"xiaoshuaige321",首先我想给你们扫除一个误区,String类创建的字符串对象是不可变的,也就是修改不了的,哪有人就要问了,为啥str="xiaoshuaige321";语句好使啊,首先str并不能完全代表String类创建的字符串对象,str只是一个字符串变量的引用,str="xiaoshuaige321";语句只是将str引用指向了"xiaoshuaige321"字符串对象,相当于str=new String("xiaoshuaige321"); ,所以当String作为传参类型时,在方法中进行了字符串引用的重新复制时,只是将引用指向了新的对象,并没有对原始的对象进行修改,当方法执行完毕之后,作为虚拟机栈中局部变量都会被销毁,方法一些操作被还原,str引用重新指向"xiaotiaosi321";,故执行后和执行前值没有改变。

  • 相关阅读:
    测试网络
    测试
    Centos6.6中VIM的编辑、退出与保存
    IP
    2018.12.24 课程更新内容到第五章 渗透测试 第4、5节
    利用GRC进行安全研究和审计 – 将无线电信号转换为数据包(转)
    我的翻译--一个针对TP-Link调试协议(TDDP)漏洞挖掘的故事
    我的翻译--针对Outernet卫星信号的逆向工程
    Sulley安装手记
    乘用车黑客手册(译)
  • 原文地址:https://www.cnblogs.com/xiaotiaosi/p/6377248.html
Copyright © 2020-2023  润新知