Java中数组与C语言中数组的比较_李舒亮 (1)

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
a[ 0] a[ 1] a[ 2] a[ 3] a[ 4]
Java中的 定义 格式 为 :type a rrayN am e [ ] ;或
type[ ] arrayN am e; 其中类型 type可以为 Java中任意的数据类 , 数
组名 arrayNam e为一个合法的标识符 , [ ]指明该变量 是一个数组类型变量 。例如 :int a[ ] ;
leng th);
fo r(j =0;j <b. length;j ++)
{
System. ou.t print ( b [ j ] + "
");
/ /打印复制之后的数组的长度和内容
}
}
}
运行结果为 : a. length =3 012 数组复制之前 : b. leng th =5 0 10 20 30 40 数组复制之后 : b. leng th =3 012 数组在复制操作之前在内存中表现形式为 :
摘 要 :从多方面比较数组在 java与 C 语言中的区别 , 根据它们在内存中的表现形式 , 找出其差别的 根本原因 。 关键 词 :数组 ;对象 ;引用变量 ;区别 ;jav a ;C 语言 中图 分类号 :TP 312 文献标识码 :A 文章编号 :1008 - 6765(2006)03 - 0085 - 03
印 a数组
System. ou.t p rintln();
/ /换行
System. ou.t p rintln("数组复制之前 :");
System. ou.t println ( "b. leng th =" +b.
leng th);
fo r(j =0;j <b. length;j ++)
{
b[ j] =j*10;
例: public c lass array sqrt { public static void m ain(S tring[ ] args) { double data[ ] ={9. 0, 56. 0, 78. 0, 35. 0, 36. 0}; p rin tA (d ata); elem Sqrt(da ta); p rin tA (d ata); } sta tic vo id p rintA (double array[ ] ) {
由上图可以看出 , 数组名有一 个单独的内存 空 间 , 存放数组对象的引用地址 。 这与 C 语言是不 同 的。
收稿日期 :2006 - 04 - 08 作者简介 :李舒亮 (1968 - ), 女 , 江西分宜人 , 副教授 , 主要从事软件及多媒体方面的研 究 。
— 85 —
第 3期
新 余 高 专 学 报
声明一个整型数组 , 数组名表 示一个引用地 址 变量 , 与 C 不同 , Java在数组的定义中并不为数组元 素分配内存 , 因此 [ ] 中不用指出数组中元素个数 , 即 数组长度 , 而且对于如 上定义的一个数组是不能 访 问它的任何元素的 。我们必须用 new 运算符为它分 配内存空间 , 其格式如下 :
是对象 。
参考文献 : [ 1] 耿袢义 , 张 跃平. Java2 实用教 程 (第二 版 )[ M ] . 北 京 :清
华大学出版社 , 2004. [ 2] 朱喜福 , 林建民 , 唐 永新. Jav a程 序设计 [ M ] . 北 京 :人民
邮电出版社 , 2001. [ 3] 李尊朝 , 苏 军. Java 程 序设 计 [ M ] . 北 京 :中 国铁 道出 版
2006(第 11卷 )
2 数组的初始化
可以结合 FOR语句给数组元素赋初值 , 也可以
在定义数组的同时进行初始化 。 数组元素的引用形
式为 :数组名 [下标 ] , 这方面 java和 C 没 有什么区
别 。与 C、 C ++中不同 , Java对数组元素要进行越
界检查以确保安全性 。 同时 , 对于每个数 组都有一
fo r(in t i =0;i <array. leng th;i ++) Sy stem. ou.t print("\t"+array[ i] ); System. ou.t p rintln(); } static vo id e lem Sqrt(double array[ ] ) { for(int i =0;i <array. length;i ++) a rray[ i] =M a th. sqrt(array[ i] ); } } 运行结果为 : 9. 0 56. 0 78. 0 35. 0 36. 0 3. 0 7. 4833 8. 8317 5. 9160 6. 0 实参数组的引用变量传递给形参数组的引用变 量内存的表示为 :
{
in t a[ ] , b[ ] , i, j;
a =new in t[ 3] ;
b =new int [ 5] ;
System. ou.t p rintln ( "a. length =" + a.
leng th);
fo r(i =0;i <a. leng th;i ++)
{
a[ i] =i;
System. ou.t print(a[ i] +"");} / 打/
数组是高级程序设计语 言中常见的数据 类型 , 它是一组有序数据的集合 , 数组中的 每个元素都具 有相同的数据类型 。 用数组名和下标来标识数组中 的每个元素 。 使用数组可以为处 理成批的 、有内在 联系的数据提供便利 , 使用数组也使 得算法的实现 更加精炼 。
在 java和 C 语言中 都提供 了数组 这种数 据类 型 , 但它们有很大的区别 , 在 C 语言中数组是一种构 造类型 , 而在 java中数组是一种引用类型 。 两者在 内存中的表现形式是完全不同的 。 由此而引出的对 数组的操作也有很大的区别 。 下面就这个问题进行 讨论 。 1 数组的定义上的不同
System. ou.t print ( b [ j ] + "
");
/ /打印 b数组
wk.baidu.com
}
System. ou.t p rintln();
b =a;
/ 数/ 组复制
System. ou.t p rintln("数组复制之后 :");
System. ou.t println ( "b. leng th =" +b.
除了以上的区别外 , 在 java类库还为 数组提供 了一系列的方法 , 加强了数组的功能 , 这里就不再说 明。 五 结论
数组在 java与 C 语言中的各种区别 , 本质原因 是 :数组在 java中是对象 , 而在 C 语言中是一种构造 类型 。 这也符合面向对象程度设 计的理念 :一切都
— 87 —
a rrayN am e =new type[ arrayS ize] ; 其中 arrayS ize指明数组的长度 。 如 : a =new int[ 5] ; 为一个整型数组分 配 5 个 int型整数所占据 的 内存空间 , 这两部分可以合在一起 , 格式如下 : type arrayN am e = new type [ arrayS ize] , 例如 : int a =new int[ 5] ; 它在内存中的表现形式为 :
个属性 leng th指明它的长度 。
3 数组操作的不同
数组元素同普通变量一样 , 可以进行各种操作 ,
如被赋值 、被打印 、参加表达式计算等 。 在 JAVA 中
数组的复制操作和 C 语言有很大不同 。 例如 :
public classA rrayC
{
public static void m ain(S tring[ ] args)
社 , 2004.
(责任编校 :任 华 )
C ompar ison of array in Java and array in C language
L I Shu - liang
(X inyu C ollege, X inyu 338000, china) Ab stract:The au thor distingu ishes the array in Java and tha t in C languag e and acco rding to the ir fo rm in core sto re, finds ou t the fundam en ta l cause s fo r differences. K ey w ords:a rray;object; refe rence variable;diffe rence; Java;C language
— 86 —
2006(第 11卷 )
李舒亮 :Java中数组与 C语言中数组的比较
第 3期
存 , 改变形参数组的引用 , 对实参数组的引用不会有 影响 , 这种影响是单向的 。 这两者表面上 看是很相 似的 , 好像都是传递地址 , 但 本质上是不一样 的 , 在 java中传递的是对象的引用地址 , 是值传递 。
以一维数组的定义为例来说明 : C语言中的定义格式为 :type arrayN am e[ 常量表 达式] ; 其中类型 type可以为 C 中任意的数据类型 , 数 组名 a rrayN am e 为一个合法的标识符 , 常量表达式指 明数组的大小 , 在 C 语言中数组的大小不允许作动 态的定义 。 例如 :int a[ 5] ; 声 明一个整 型数组 a, 长 度为 5, 包含 a [ 0] 、 a [ 1] 、a[ 2] 、a[ 3] 、a[ 4]这 5个整型元素 , 在内存中为 这个数组分配一片连续的内存空间存放这 5个元素 , 数组名可以表示数组的首地址 , 但并 没开创一个内 存空间来存放数组名 。它在内存中的表现形式为 :
数组作参数分为数组 元素和数组名 两种 , 基 本 数据类型的数组元素作形参和实 参 , 实现的是值 传 递 , 这一点 java和 C 语言是一样的 。 用数组名作为 函数的形参和实参 , 在 C 语言中实现的是地址传递 , 把实参数组的地址传递给形参数 组 , 使得实参数 组 和形参数组共用同一段存储空间 , 形参数组的改 变 会影响实参数组 , 这种影响是双向的 ;而在 java中用 数组名作方法的形参和实参 , 实现的是值传递 , 把实 参数组名的引用地址传递给形参 数组的引用 , 使 得 形参数组的引 用和实 参数组 的引用 指向同 一段 内
数组复制操作完成之后内存的表现形式 :
从图中可以看出 , 执行 b =a语句后 , a把自己的 引用地址赋值给了 b, 使得 b 和 a指向同一段内存 , 而 b 原来指向的内存空间就变成了一个空的引用 , 最后会被 java的垃圾回收机制自动收回 。 而在 C 语 言中 , 数组名是不能进行直接进行赋值的 。 4 数组作参数的不同
第 11卷第 3期 2006年 6月
新 余 高 专 学 报 JOURNA L O F X INYU CO LLEGE
V o .l 11, NO. 3 Jun. 2006
Java中数组与 C 语言 中数组的比较
● 李舒亮
(新余高等专科学校 计算机 系 , 江西 新余 338000)
相关文档
最新文档