请选择 进入手机版 | 继续访问电脑版
搜索
房产
装修
汽车
婚嫁
健康
理财
旅游
美食
跳蚤
二手房
租房
招聘
二手车
教育
茶座
我要买房
买东西
装修家居
交友
职场
生活
网购
亲子
情感
龙城车友
找美食
谈婚论嫁
美女
兴趣
八卦
宠物
手机

Java方法之参数传递机制

[复制链接]
查看: 44|回复: 0

8157

主题

8157

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
24481
发表于 2019-12-2 23:12 | 显示全部楼层 |阅读模式
目录
            
    Java方式之参数转达机制

Java方式中假如声大白形参,在挪用方式时就必须给这些形参指定参数值,现实传进去的这个值就叫做实参
这就触及到Java中的参数转达机制,值转达
底子数据典范

底子数据典范,值转达的表示是数值的转达。
  1. public class TransferTempTest {    public static void main(String[] args) {        //底子数据典范参数转达        TransferTempTest test = new TransferTempTest();        int num1 = 10;        int num2 = 20;        System.out.println("举行交换前:");        System.out.println("num1 = " + num1 + ",num2 = " + num2);        test.swap(num1, num2);        System.out.println("交换以后:");        System.out.println("num1 = " + num1 + ",num2 = " + num2);    }   public void swap(int a, int b) {        int temp = a;        a = b;        b = temp;        System.out.println("交换进程中:");        System.out.println("num1 = " + a + ",num2 = " + b);    }}
复制代码
  1. //运转成果举行交换前:num1 = 10,num2 = 20交换进程中:num1 = 20,num2 = 10交换以后:num1 = 10,num2 = 20
复制代码
全部进程的内存图演示:
我的关键词 Java方式之参数传递机制  热门消息 1771072-20191202190814771-1351481768

如图所示:

  • 在堆内存中建立 TransferTempTest典范的工具,假定此时地址值时0x1177(只是假定),并让栈内存中的援用变量test存储0x1177,指向该工具。
  • 在栈内存中声明两个变量num1和num2,并为他们赋值10和20。这时可以看到打印的成果为:num1 = 10,num2 = 20
  • 步伐继续向下,进入swap方式,首先在栈区声明两个变量a和b,他们都是形参,这时将num1和num2的额外传入,此时如蓝色字体所表示,a=10,b=20。
  • 接着还是在栈区声明一个名为temp的变量,这时实行的交换进程是在swap方式中,交换的变量实在是num1和num2的拷贝值,所以方式内打印:num1 = 20,num2 = 10
  • 末端,退出这个方式,部分变量烧毁,发现实在一顿操纵,本来的值底子就没有改变,打印成果和本来一样:num1 = 10,num2 = 20
援用数据典范

底子数据典范,值转达的表示是地址值的转达。
  1. public class TransferTempTest {    public static void main(String[] args) {    //援用典范参数转达        DataTemp data = new DataTemp();        data.a = 2;        data.b = 4;        System.out.println("举行交换前:");        System.out.println("data.a = " + data.a + ",data.b = " + data.b);        data.swapClass(data);        System.out.println("举行交换后:");        System.out.println("data.a = " + data.a + ",data.b = " + data.b);    }}class DataTemp {    int a;    int b;    public void swapClass(DataTemp data) {        int temp = data.a;        data.a = data.b;        data.b = temp;        System.out.println("交换进程中:");        System.out.println("data.a = " + data.a + ",data.b = " + data.b);    }}
复制代码
  1. //运转成果举行交换前:data.a = 2,data.b = 4交换进程中:data.a = 4,data.b = 2举行交换后:data.a = 4,data.b = 2
复制代码
全部进程的内存图表示:
我的关键词 Java方式之参数传递机制  热门消息 1771072-20191202190901453-446279607

如图所示:

  • 在堆内存中建立DataTemp典范的工具,并让栈内存中的援用变量data存储0x7788(假定地址止堠,指向该工具,实例变量a和b的初始值都是0。
  • 让data.a=2,data.b=4,如蓝色字体表示,这时打印:data.a = 2,data.b = 4
  • 进入swapClass方式,首先在栈区声明形参变量data,将本来的data的地址值传入,红黑两个data不是同一个!!,红色data只是黑色data的拷贝值,且拷贝的是地址值。这时两个data指向同一片堆区内存,如红色箭头表示。
  • 接着还是在栈区声明一个名为temp的变量,介入交换操纵,这时操纵的是堆区的数据,所以方式里明显打印:data.a = 4,data.b = 2
  • 末端,退出这个方式,部分变量烧毁,实行的交换进程固然是在swapClass方式中,但援用变量传入形参转达的是地址止墁意味着,这时的交换操纵间接对堆区工具生效,所以终极交换建立:data.a = 4,data.b = 2
综合练习
  1. package com.my.pac05;public class TransferTest {    public static void main(String[] args) {        TransferTest test = new TransferTest();        test.first();    }    public void first() {        int i = 5;        Value v = new Value();        v.i = 25;        second(v, i);        System.out.println(v.i);    }    public void second(Value v, int i) {        i = 0;        v.i = 20;        Value val = new Value();        v = val;        System.out.println(v.i + " " + i);    }}class Value {    int i = 15;}
复制代码
  1. //运转成果15 020
复制代码
全部进程的内存图表示:
我的关键词 Java方式之参数传递机制  热门消息 1771072-20191202190846248-2131656410

总结


  • 方式不能点窜底子数据典范的参数,他们改变的仅仅是他们的拷贝。
  • 方式可以改变工具参数的状态,由于方式可以经过工具援用的拷贝点窜工具状态。
  • 方式不能让工具参数援用一个新的工具,方式获得的永久都是拷贝值。

免责声明:假如加害了您的权益,请联系站长,我们会实时删除侵权内容,感谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2006-2014 淄博新闻网-淄博日报 淄博晚报 淄博财经新报 掌中淄博 淄博专业新闻资讯发布网站 版权所有 法律顾问:高律师 客服电话:0791-88289918
技术支持:迪恩网络科技公司  Powered by Discuz! X3.2
快速回复 返回顶部 返回列表