当前位置: 首页 > wzjs >正文

雷州手机网站建设电子商务网站软件建设核心

雷州手机网站建设,电子商务网站软件建设核心,兖州那有做网站的,医院风格 wordpress1 形参&实参 方法的定义可能会用到参数,参数在程序语言中分为: 实参:用于传递给函数/方法的参数,必须有确定的值。 形参:用于定义函数/方法,接收实参,不需要有确定的值。 String hello …

1 形参&实参

方法的定义可能会用到参数,参数在程序语言中分为:

实参:用于传递给函数/方法的参数,必须有确定的值。

形参:用于定义函数/方法,接收实参,不需要有确定的值。

String hello = "Hello!";
//hello 为实参
sayHello(hello);
//str 为形参
void sayHello(String str){System.out.println(str);
}

2 值传递&引用传递

程序设计语言将实参传递给方法(或函数)的方式为两种:

  • 值传递:方法接收的是实参值的拷贝,会创建副本。
  • 引用传递:方法接收的直接是实参所引用的对象在堆中的地址,不会创建副本,对形参的修改将影响到实参。

很多程序设计语言(比如C++、Pascal)提供了两种参数传递的方式,不过,在Java中只有值传递。

3 为什么Java只有值传递? 

通过三个案例来说明。

案例1:传递基本类型参数

代码:

public static void main(String[] args){int num1 = 10;int num2 = 20;swap(num1,num2);System.out.println("num1 = " + num1);System.out.println("num2 = " + num2);
}public static void swap(int a,int b){int temp = a;a = b;b = temp;System.out.println("a = " + a);System.out.println("b = " + b);
} 

 输出:

a = 20
b = 10
num1 = 10
num2 = 20

在 swap()方法中,a、b的值进行交换,并不会影响到num1 、num2。因为,a、b的值,只是从num1、num2的复制过来的。也就是说,a、b相当于num1、num2的副本,副本的内容无论怎么修改都不会影响到原件本身。

通过上面例子,我们已经知道了一个方法不能修改一个基本数据类型的参数,而对象引用作为参数就不一样,请看案例2。

代码:

public statuc void main(String[] args){int[]  arr = { 1, 2, 3, 4, 5 };System.out.println(arr[0]);change(arr);System.out.println(arr[0]);
}public static void change(int[] array) {//将数组的第一个元素变为0array[0] = 0;
}

 输出:

1
0

解析:

这里的传递的还是值,不过,这个值是实参的地址罢了。

也就是说change方法的超参数拷贝的是arr(实参)的地址,因此,它和arr指向的是同一个数组对象。这也就说明了为什么方法内部对形参的修改会影响到实参。

为了更加有力的反驳Java对引用类型的参数采用的不是引用传递,我们再来看下面这个案例!

public class Person {private String name;// 省略构造函数、Getter&Setter方法
}public static void main(String[] args) {Person xiaoZhang = new Person("小张");Person xiaoLi = new Person("小李");swap(xiaoZhang, xiaoLi);System.out.println("xiaoZhang:" + xiaoZhang.getName());System.out.println("xiaoLi:" + xiaoLi.getName());
}public static void swap(Person person1, Person person2) {Person temp = person1;person1 = person2;person2 = temp;System.out.println("person1:" + person1.getName());System.out.println("person2:" + person2.getName());
}

 输出:

person1:小李
person2:小张
xiaoZhang:小张
xiaoLi:小李

能够看到两个引用类型的形参互换并没有影响实参!

swap方法的参数person1和person2只是拷贝的实参xiaoZhang和xiaoLi的地址。因此,person1和person2的互换只是拷贝的两个地址的互换罢了,并不会影响到实参xiaoZhang和xiaoLi。

4 引用传递是怎么样的?

看待这里应该相信java只有值传递,是没有引用传递的。

但是引用传递是什么样的,我们拿c++代码看一下。

#include <iostream>void incr(int& num)
{std::cout << "incr before: " << num << "\n";num++;std::cout << "incr after: " << num << "\n";
}int main()
{int age = 10;std::cout << "invoke before: " << age << "\n";incr(age);std::cout << "invoke after: " << age << "\n";
}

 输出结果:

invoke before: 10
incr before: 10
incr after: 11
invoke after: 11

可以看到,在 incr 函数中对形参的修改,可以影响到实参的值。要注意:这里的 incr 形参的数据类型用的是 int& 才为引用传递,如果是用 int 的话还是值传递哦!

5 为什么Java不引入引用传递呢?

引用传递看似很好,能在方法内就直接把实参的值修改了,但是,为什么 Java 不引入引用传递呢?

注意:以下为个人观点看法,并非来自于 Java 官方:

  1. 出于安全考虑,方法内部对值进行的操作,对于调用者都是未知的(把方法定义为接口,调用方不关心具体实现)。你也想象一下,如果拿着银行卡去取钱,取的是 100,扣的是 200,是不是很可怕。
  2. Java 之父 James Gosling 在设计之初就看到了 C、C++ 的许多弊端,所以才想着去设计一门新的语言 Java。在他设计 Java 的时候就遵循了简单易用的原则,摒弃了许多开发者一不留意就会造成问题的“特性”,语言本身的东西少了,开发者要学习的东西也少了。

摘自作者GuideJava 值传递详解 | JavaGuide

http://www.dtcms.com/wzjs/604999.html

相关文章:

  • 做网站怎么插音乐循环广东的网站备案
  • 辽宁网站建设企业定制公司永久免费linux服务器下载
  • 沧州国外网站建设织梦如何做汽车贸易网站
  • 宁津 做网站建自己的网站做外贸
  • 开发网站培训班厦门网站建设推广
  • 计算机学习网站内蒙古自治区建设厅网站首页
  • asp 网站开发教程龙岩设计师
  • 汝阳网站建设荷兰网站域名
  • 网站繁体js公司管理系统网站
  • 滁州网站建设联系方式最近几天新闻大事
  • 做国外网站的站长微软哪个软件做网站
  • 重庆seo整站优化系统网页设计尺寸标注
  • 义乌公司网站wordpress 文章文件夹
  • 做传奇网站怎么弄怎么让网站被搜索到
  • 株洲做网站优化培训网站建设
  • 广州建设高端网站网站做友情链接的用途
  • 网站超链接的优化公司企业做网站怎么做
  • 重庆网站建设子沃科技熊掌号汽车网站策划书
  • 做外贸网站如果是东西杂会不会不好推广大连网站设计公司排名
  • 梦扬科技 合肥网站建设app开发费用报价表
  • 延庆县专业网站制作网站建设房地产网
  • 做资源的教育类网站或公司mvc5 网站开发之美 pdf
  • 做网站一个月能赚多少钱电子商务网站建设基本组成
  • 网站域名备案服务广州网站开发公司有哪些
  • 西安网站模板建站柳州 网站建设
  • 网站制作需要多长时间网站首页轮播
  • 一个专门做网站建设的公司wordpress 数据库 utf8
  • 三亚建设网站中国合同网官网
  • gta5线下买房网站建设大数据网站建设和
  • 沈阳建网站平台南昌seo排名扣费