个人的一些认识,希望能对初学Java的你,或者困惑于方法参数传递的你祈祷一丝帮助!

下面是一些作者的个人观点,如果有错,欢迎各位大牛指出错误,灰常感谢您的观看与支持...

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

今天学习Java的时候,看见书中提及方法参数传递

有按值传递 和按地址传递;

 我们如何判断一个类中它采用的值传递还是引用传递呢,我们要看类中的形参。
 如果形参的数据是基本数据类型,那么我们就可以断定他是值传递,
  eg.  本包中的People.java 和Human.java 中有对值传递的介绍;
package com.baidu;

public class People {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
    Human human = new Human("dengchunlai");
    //human.yang();    不能这样使用,因为 String yang是定义的字符串类型的类(变量),不是方法;

    //human.yang;//不能这样使用;
    String ming = human.yang;
    System.out.println(human.yang);        //但可以这样使用;
    System.out.println(ming);
    }

}
package com.baidu;

public class Human {

    String yang;
    public Human(String st1) {
        // TODO Auto-generated constructor stub
        yang = st1;
    }
}

上面的源代码是Java中的按值传递:

那什么是引用传递呢?

如果形参里的数据为 类 ; 那么我们就断定他是引用传递;

(*)按引用传递参数时,被调用的方法中的代码将直接访问原始对象  ->[按引用传递的基础]
package com.baidu;

class Data {
    String msg;
    public Data(String str) {
        // TODO Auto-generated constructor stub
        this.msg = str;
    }
//    public Data() {
//
//    }
}
package com.baidu;

public class DataPrinter {
    void print(Data d) {
        System.out.println(d.msg);
    }
    public void setMsg(Data d) {
        d.msg = "Hello to Java ! ";
    }

}
public class MethodCallDemo2 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Data data = new Data("Hello from Java !");        //创建了一个Data类对象的一个引用data,同时new了一个有参的构造函数;
        DataPrinter dp = new DataPrinter();
//        System.out.println("第一次输出结果;"+ data.msg);
        dp.setMsg(data);
        System.out.println("第二次输出结果:"+data.msg);
    }

}

证明()里是一个无参的构造方法:

[个人心得]:在编写代码的时候发现 Data data = new Data("Hello from java !");
        在使用这句语句的时候我在Data 我们需要在类中建立一个带字符串型的形参的构造方法;
          由于在之前单独使用创建的时候是调用无参的构造函数,我在想他放到构造一个默认的无参的构造函数呢,于是我在Data类中构造了一个无参的
          但事实证明,程序出现报错,由此可证明()中确实是一个构造函数,但为什么不显示他的构造函数呢,第一句语句new的是一个构造函数,且并不显示,可能由于系统默认吧!

言归正传:

这个代码的核心就是   dp.setMsg(data);
我们怎么理解呢,DataPrinter类中的设置器中的形参是Data d;      他这么设置形参的原因是什么呢,可能由于主方法的  dp.setMsg(data);
是要求Data类,所以引用传递,由于(按引用传递参数时,被调用的方法中的代码将直接访问原始对象),所以setMsg()这个方法里面的代码
可以直接访问Data这个原始类的原始对象String msg;

Java中不得不谈的值传递和地址传递的更多相关文章

  1. JAVA中获取文件MD5值的四种方法

    JAVA中获取文件MD5值的四种方法其实都很类似,因为核心都是通过JAVA自带的MessageDigest类来实现.获取文件MD5值主要分为三个步骤,第一步获取文件的byte信息,第二步通过Messa ...

  2. C语言:值传递,地址传递和引用传递(example:值交换)

    于C语言中值传递.地址传递和引用传递的我个人理解. 通过一个例子:swap(交换两个整型变量的值)来表现! #include <stdio.h> void swap1(int* a,int ...

  3. “equals”有值 与 “==”存在 “equals”只是比较值是否相同,值传递,==地址传递,null==a,避免引发空指针异常,STRING是一个对象==null,对象不存在,str.equals("")对象存在但是包含字符‘''

    原文链接:http://www.cnblogs.com/lezhou2014/p/3955536.html "equals" 与 "==" "equa ...

  4. C语言 值传递和地址传递

    不少同学在学到C语言的指针部分时感到很困惑,对经常提到的"值传递"和"地址传递"两个概念弄不 明白.实际上,因为地址本身也可以作为一个特殊的"值&qu ...

  5. C语言参数传递(值传递、地址传递)+二级指针

    参数传递 C语言参数传递一般分为:值传递和地址传递(本质上只有值传递) (注意:C语言中没有引用传递,C++才有引用传递,因为很多C语言环境是用C++编译器编译,使得C看起来支持引用传递,导致很多网上 ...

  6. C#函数的参数传递方式1(值传递与地址传递)

    using System; namespace class1 { class program { static void Main(string[] args) { //值传递引用,实际参数不会变化 ...

  7. c语言进阶9-值传递与地址传递

    一.  函数的值传递 函数的值传递是指参数为基本类型时,如整型.浮点型.字符型(特指单字符型)时,参数传递时是从实参拷贝一份值传给形参,形参的变化不会影响实参的值. 1.        基本类型做参数 ...

  8. Java中传参的值传递和引用传递问题(转)

    今天遇到了一个java程序,需要用参数来返回值(虽然最后用另一种方法实现了),在网上看到这样一篇文章,很受启发. 本文章来自于http://hi.baidu.com/xzhilie/blog/item ...

  9. Java中的值传递和地址传递(传值、传引用)

    首先,不要纠结于 Pass By Value 和 Pass By Reference 的字面上的意义,否则很容易陷入所谓的“一切传引用其实本质上是传值”这种并不能解决问题无意义论战中.更何况,要想知道 ...

随机推荐

  1. tablayout_不能左右滑动问题小计

    <android.support.design.widget.TabLayout android:id="@+id/tab_pic" android:layout_width ...

  2. 前端响应式痛点解决之box-sizing

    前置 在 CSS 盒子模型的默认定义里,你对一个元素所设置的 width 与 height 只会应用到这个元素的内容区.如果这个元素有任何的 border 或 padding ,绘制到屏幕上时的盒子宽 ...

  3. storm入门demo

    一.storm入门demo的介绍 storm的入门helloworld有2种方式,一种是本地的,另一种是远程. 本地实现: 本地写好demo之后,不用搭建storm集群,下载storm的相关jar包即 ...

  4. React入门理解demo

    1.React文档结构 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  5. 【未解决】iOS QBImagePickerController访问相册没有取消和确定按钮

    这两天调程序时遇到了这个问题,如图所示: 感觉这问题也是奇葩………… 用系统的 UIImagePickerController 替换后就正常了.看来是 QBImagePickerController ...

  6. Something wrong with EnCase v8 index search results

    My friend told me that she installed EnCase v8.05 on her workstation which OS version is Win 10. She ...

  7. Linux 常见的常识及常用快捷键方式

    1.  ,请写出linux系统中常见一级目录的名称及作用. /root :   超级用户的家目录 /home:  普通用户的家目录 /boot:   启动目录,启动相关文件(系统内核启动文件) /de ...

  8. 用python实现九九乘法表输出-两种方法

    2019-08-05 思考过程:九九乘法表需要两层循环,暂且称之为内循环和外循环,因此需要写双层循环来实现. 循环有for和while两种方式. for循环的实现 for i in range(1,1 ...

  9. 在 树莓派(Raspberry PI) 中使用 Docker 运行 aspnetcore/dotnetcore 应用

    本文主要利用 Microsoft 提供的 Dockerfile 进行安装. 虽然Raspberry PI 3 CPU支持 armv8 指令集 ,但是在 docker info 还是识别为 " ...

  10. Java连载14-补码简介&浮点型整数

    一.补码简介 1.计算机中的符号数有三种表示方式,即为:原码.反码.补码.三种表示方法均有符号位和数值位,符号位都是0表示正数,符号位都是1表示负数. 2.计算机中的数字的存储方式:在计算机系统中,数 ...