java参数传递问题

原创 2018年04月16日 16:44:42

问题描述:在传递java参数的时候如果参数为基本数据类型或者引用数据类型,那么传递完成之后参数本身值是否会发生改变?

代码测验:
1: 传递基本数据类型

package com.test.other;

public class ParamTransfer {

    private int money;

    public static void main(String[] args){
        ParamTransfer pt=new ParamTransfer();
        pt.money=10;
        pt.method(pt.money);

        System.gc();

    }

    public void method(int i) {  //此处为传数值,只是把money的值拷贝给了i
        // TODO Auto-generated method stub
        System.out.println("传入的值:"+i);
        i=i*5;
        System.out.println("改变后的i值:"+i);

        System.out.println("money的值:"+this.money);
    }


}

运行后的输出:
传入的值:10
改变后的i值:50
money的值:10

2:传递引用数据类型

package com.test.other;


 class Time{

     int h;

     int f;

     int s;

     Time(int h, int f, int s){
         this.h=h;
         this.f=f;
         this.s=s;
     }
 }

public class ObjectParamTransfer {

    private Time t;

    public static void main(String[] args){
        ObjectParamTransfer opt=new ObjectParamTransfer();
        opt.t=new Time(11,12,13);

        opt.method(opt.t);

        System.out.println("改变后t的值(方法外): h="+opt.t.h+" f="+opt.t.f+" s="+opt.t.s);

    }

    private void method(Time tt) {  //此处为内存地址传递
        // TODO Auto-generated method stub

        System.out.println("传入后tt值:h="+tt.h+" f="+tt.f+" s="+tt.s);

        tt.h=1;
        tt.f=2;
        tt.s=3;

        System.out.println("改变后tt值:h="+tt.h+" f="+tt.f+" s="+tt.s);

        System.out.println("改变后t的值(方法内): h="+this.t.h+" f="+this.t.f+" s="+this.t.s);
    }

}

运行后输出:
传入后tt值:h=11 f=12 s=13
改变后tt值:h=1 f=2 s=3
改变后t的值(方法内): h=1 f=2 s=3
改变后t的值(方法外): h=1 f=2 s=3

结论:
Java在传递参数的时候都是进行传值调用(在运行栈中,基本类型和引用的处理是一样的,都是传值,所以,如果是传引用的方法调用,也同时可以理解为“传引用值”的传值调用,即引用的处理跟基本类型是完全一样的。但是当进入被调用方法时,被传递的这个引用的值,被程序解释(或者查找)到堆中的对象,
这个时候才对应到真正的对象。如果此时进行修改,修改的是引用对应的对象,而不是引用本身,即:修改的是堆中的数据。所以这个修改是可以保持的了)。基本数据类型是通过复制值进行传递的。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_31071543/article/details/79962750

Java的引用和函数参数传递

  • 2018年03月17日 20:01
  • 17KB
  • 下载

Java学习笔记 --- Java中的参数传递问题

前言这学期学校开了Java, 所以服务器组的小伙伴们都开心地写起了Java. 昨天晚上萌萌哒的校园问了我一个问题, 在C语言中参数的传递中, 我们可以使用指针进行传递, 从而更改参数的值, 可是在Ja...
  • dela_
  • dela_
  • 2017-09-24 10:46:56
  • 209

java学习日记_8: Java中的参数传递问题

给出一点代码: class ArgsDemo { public static void main(String[] args) { int a = 10; int b = 20; Syste...
  • qq_31539817
  • qq_31539817
  • 2016-08-28 13:44:47
  • 246

Java中方法的参数传递问题及图解

为了讲解清楚Java中的参数传递问题, 首先介绍一下Java中的内存分配. Java中的内存分配以及栈和堆的区别     A:栈(主要)         存储局部变量(如类中的方法(也包含mai...
  • menglanyingfei
  • menglanyingfei
  • 2017-02-10 16:18:43
  • 187

浅析Java引用类型和方法参数传递

  • 2011年11月06日 08:24
  • 57KB
  • 下载

Java 方法参数的值传递和引用传递

Java 方法参数的值传递和引用传递在Java中,实际上都是值传递,并不存在引用传递。人们所说的引用传递,实则为指针间地址的传递。要理解此,我们必须明白一个概念,形如Object o;这样的定义,实际...
  • FIRE_TRAY
  • FIRE_TRAY
  • 2016-02-10 10:58:10
  • 1078

java的String类型作为参数传递

转载:http://blog.csdn.net/pony_maggie/article/details/44120045 看一段代码: [java] view ...
  • sujiacheng_123
  • sujiacheng_123
  • 2016-11-29 15:01:45
  • 810

java方法参数传递

 java方法参数传递问题,有争论传值、传引用的,写几行实际看看就行了。package nba;import java.util.ArrayList;import java.util.List;pub...
  • flyjimi
  • flyjimi
  • 2008-07-11 13:44:00
  • 8160

Java方法中的参数传递方式

在Java语言中,参数传递时,一般存在两种参数传递的规则 1.按值传递(by value) 使用该方式传递的参数,参数原始的值不发生变化 适用范围:八种基本数据类型和...
  • u011499992
  • u011499992
  • 2015-08-04 19:11:25
  • 1601

Java参数传递PPT

  • 2008年04月20日 23:10
  • 873KB
  • 下载
收藏助手
不良信息举报
您举报文章:java参数传递问题
举报原因:
原因补充:

(最多只允许输入30个字)