个人的一些认识,希望能对初学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. dij模板

    #include<cstdio> #include<vector> #include<queue> using namespace std; struct edge ...

  2. David与Vincent的博弈游戏[树型DP]

    \(\mathcal{Description}\) \(\mathcal{Solution}\) 根据题意,我们知道 根节点深度为1,深度为 奇数 的节点由\(David\)移动,我们称为\(D\)点 ...

  3. java和golang通过protobuf协议相互通信

    目录 整体结构说明 protobuf2文件 golang客户端 目录结构 生成pb.go文件 main.go util.go java服务端 目录结构 pom.xml application.yml ...

  4. get 请求和post请求的具体区别

    get请求是向服务器索要数据,post请求是向服务器传送数据 的,浏览器限制了get的传送量,post可以大量的把数据传给 服务器,一般情况下get请求,请求体是空的,请求只发一次 ,如果是post请 ...

  5. SD卡操作

    读写SD卡 Context类的openFileInput和openFileOutput方法都是针对应用程序的数据文件夹进行的文件操作,由于手机的ROM容量有限,因此这种操作有一定局限性. 手机的SD卡 ...

  6. win7 磁盘碎片整理

    最近每天早上开机,都出现开机正常,但是所有软件都没法点开,性能特别差: 咨询了运维小伙伴,提示可以整理下电脑磁盘碎片试试.那么如何整理呢,如下详细说明 1.先整理C盘,打开我的电脑,在C盘上,右击-- ...

  7. es6,@import一直报错 Can't resolve。。

    最近在项目中新增了一个按钮组的组件页面,但是在其他页面引入时,一直报错 引入方式:

  8. leetcode并发题目解题报告JAVA版

    一.Print in Order Suppose we have a class: public class Foo { public void first() { print("first ...

  9. php 获取未来七天的日期和星期

    php获取未来七天的日期和星期代码     for($i=4;$i<8;$i++){       $dateArray[$i]=date('Y-m-d',strtotime(date('Y-m- ...

  10. Vue监听键盘回车事件

    在写页面时遇见了登录页需要加一个键盘回车事件. vue 的 v-on中有这样的修饰符 <input v-on:keyup.enter="submit"> 即<in ...