java中的形参是复制实参的一份拷贝(对于引用类型则是复制引用的拷贝,在栈中的拷贝),所以在函数中改变形参是无法改变实参的值的,改变引用只是将形参所代表的引用指向另外的新的对象,而实参的引用还指向原来的对象,改变形参引用的成员当然会影响实参引用成员的值,因为他们的引用都指向同一个对象。【Java只有值传递Java只有值传递Java只有值传递,重要的事情说3遍】

示例代码:

public class ExchangeValue {

public static void main(String[] args) {

int a = 0;//基本数据类型

String str = "str";//String

StringBuffer sb = new StringBuffer("sb");//引用数据类型

System.out.println("a = "+ a +", str = " + str + ", sb = " + sb);

ExchangeValue.exchange(a, str, sb);

System.out.println("a = "+ a +", str = " + str + ", sb = " + sb);

}

static void exchange(int a, String b, StringBuffer c){

a = 1;

b = "newStr";

c.append(" changed");

System.out.println(c);

c = new StringBuffer("newSb");

System.out.println(c);

}

}

先自己想一想,所有代码结果均在最下方。

C语言函数参数传递方式1:值传递

示例代码:

void Exchg1(int x, inty)

{inttmp;

tmp=x;

x=y;

y=tmp;

printf(“x=%d,y=%d/n”,x,y)

}voidmain()

{int a=4,b=6;

Exchg1 (a,b) ;

printf(“a=%d,b=%d/n”,a,b)

}

C语言函数参数传递方式2:地址传递

示例代码:

Exchg2(int *px, int *py)

{int tmp=*px;*px=*py;*py=tmp;

print(“*px=%d,*py=%d/n”,*px,*py);

}

main()

{int a=4;int b=6;

Exchg2(&a,&b);

Print(“a=%d,b=%d/n”, a, b);

}

C语言函数参数传递方式3:引用传递【变量的别名,对别名操作就是对变量本身操作】

示例代码:

Exchg3(int &x, int &y) //注意定义处的形式参数的格式与值传递不同

{int tmp=x;

x=y;

y=tmp;

print(“x=%d,y=%d/n”,x,y);

}

main()

{int a=4;int b=6;

Exchg3(a,b);//注意:这里调用方式与值传递一样

Print(“a=%d,b=%d/n”, a, b);

}

附一段自认为比较好的C指针介绍:

变量a 本质上代表一个存储单元。CPU通过该存储单元的地址访问该存储单元中的数据。所以a本来代表两个值:存储单元的地址和储单元中的数据。于是就有了二异性。为了消除这种二义性,C语言规定a表示存储单元中的数据,而&a表示存储单元的地址。

a存储单元中的数据可以是一个普通数值,也可以是另一个存储单元的地址,比如:a = &b; 语句就是将b的存储单元的地址存入a存储单元中。 C语言规定*a代表a中存储的地址对应的存储单元中的数据,也就是访问*a就等于访问b,于是*a提供了通过a访问b中的数据的手段。

a表示a对应的存储单元中的数据。

&a表示a对应的存储单元的地址。

*a表示:首先,要求a对应的存储单元中的数据一定是另一个存储单元的地址。

于是,*a表示另一个存储单元中的数据。

当a声明的类型是int时,a中存储的是一个整数数值,通过a可以访问(读取或修改)这个数值。

当a声明的类型是int*时,a中存储的是一个存储单元的地址,而该存储单元中存储的数据是一个整数数值;通过*a可以访问(读取或修改)这个数值。

a == &*a 都是该存储单元的地址。

当a声明的类型是int**时,a中存储的是一个存储单元的地址,而该存储单元中存储的数据是另外一个存储单元的地址,另外这个存储单元中存储的是一个整数数值;通过**a可以访问(读取或修改)这个数值。

最后,在C语言里地址叫指针。

Java片段运行结果:

a = 0, str = str, sb = sb

sb changed

newSb

a = 0, str = str, sb = sb changed

C1运行结果:

x=6 , y=4

a=4 , b=6

C2运行结果:

*px=6,*py=4

a=6,b=4

C3运行结果:

x=6, y=4

a=6, b=4

c java 传参数_Java和C的方法参数传递方式的比较相关推荐

  1. java getmethod 使用_java – 使用子类作为方法参数调用getMethod

    是否可以调用一个方法,其中参数对象或参数类是一个子类,并且该方法本身将超类作为参数? 我试图调用这个方法public void setNewProblem(Problem problem);具体实现了 ...

  2. java中的命令行参数_Java中的命令行参数

    java中的命令行参数 Command-line arguments in Java are used to pass arguments to the main program. If you lo ...

  3. java 接收命令行参数_java中的命令行参数_Java中的命令行参数

    java中的命令行参数 Command-line arguments in Java are used to pass arguments to the main program. If you lo ...

  4. 请教:Java字符串内部的大括号,与方法参数中的...,代表什么意思呢?

    在Github上学习设计模式,读到源码的时候有点疑问,估计一下大概知道是什么意思,希望大神们能具体解释一下这种用法,多谢! import org.slf4j.Logger; import org.sl ...

  5. java arrays.aslist()_Java中Arrays.asList()方法详解及实例

    Arrays.asList() 是将数组作为列表. 问题来源于: public class Test { public static void main(String[] args) { int[] ...

  6. Java核心技术卷一 -第四章:方法参数

    系列文章目录 Java核心技术卷一 -第一章:java"白皮书"的关键术语 Java核心技术卷一 -第三章:数据类型 Java核心技术卷一 -第三章:变量与常量 Java核心技术卷 ...

  7. java集合示例_Java集合的addAll()方法和示例

    集合类addAll()方法addAll()方法在java.lang包中可用. addAll()方法用于将所有给定元素(ele)放入给定集合(co). addAll()方法是一个静态方法,可以使用类名进 ...

  8. java parsefloat 误差_Java Float类parseFloat()方法与示例

    Float类parseFloat()方法parseFloat()方法在java.lang包中可用. parseFloat()方法用于返回与给定String表示形式相对应的float值,换句话说,我们可 ...

  9. java字符截取_java中截取字符串方法

    Java 简介 substring public String substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串.该子字符串始于指定索引处的字符,一直 ...

最新文章

  1. Perl 校验命中的脚本
  2. C# 连接SQL数据库字符串
  3. 移动端H5页面高清多屏适配方案
  4. 火狐渗透测试浏览器_微软、火狐浏览器、Opera浏览器等主流平台纷纷布局IPFS:大势所趋...
  5. 刚刚,改造了下BaseDao……
  6. Bartender 让Mac选项列不再拥挤
  7. 三倍快乐!推荐跨Win/Mac/Linux平台免费优质软件
  8. 大芒果mysql下载_魔兽世界大芒果单机版下载|单机魔兽世界大芒果下载v3.3.5 安卓版_ 2265游戏网...
  9. 玩客云 装java_玩客云内置 eMMC 存储刷入 armbian
  10. QQ企业邮箱发送邮件
  11. UE4 创建地形失败:Unreal Engine 4 Crash Reporter
  12. PPSIG携手100+位contributor,共建飞桨开源社区
  13. LeetCode08 有效的数独
  14. 未来影像!华为P30国行版售价曝光:徕卡四摄+超级变焦,3988元起
  15. 如何与其他用户共享SkyBell HD访问
  16. python 群发邮件数量限制_python群发邮件
  17. python学习——主要的代码结构,模块和包
  18. 单片机c语言置位程序流程图,单片机c语言教程第十二章--C51开关分支语句
  19. 64位office无法安装
  20. 哈佛管理论丛-谁背上了猴子(转)

热门文章

  1. rsync+inotify一键安装脚本
  2. javaWeb防止恶意登陆或防盗链的使用
  3. apache_tomcat整合应用
  4. RHCS图形界面建立GFS共享上
  5. 气泡形提示控件grumble.js
  6. 企业根CA方法客户机证书的解决方案,ISA2006系列之三十
  7. linux中-i选项的作用,linux – find中的-prune选项有什么作用?
  8. p10平板电脑android,8英寸安卓系统 Newpad P10平板电脑评测
  9. 地脚螺钉直径系列_百科:螺栓、螺钉、螺丝三个概念,别再傻傻分不清!
  10. c语言 将url图片存到本地_一个22万张NSFW图片的鉴黄数据集?我有个大胆的想法……...