JAVA中的一维数组和二维数组并和C语言进行比较

 1.一维数组


  在这里java中的一维数组和c语言的一维数组,有很大的相同之处,但也有很多不同之处,这里主要就是说说他们的不同之处。


  1.首先是关于定义放面。

在c语言中,定义一个整型数组是  int arr[5] = {1,2,3,4,5}; 这样定义的,这样定义是不是很笼统啊。

而在java中,定义一个整型数组是  int[] arr = {1,2,3,4,5}; 这样定义的,从这里我们可以准确的看出

这里是什么类型,int[] 就是他的类型嘛,而c语言中不符合这样,所以java更能充分展示这一点。



public class Main {
    public static void main(String[] args) {
       int[] arr1 = {1,2,3,4,5};//第一种是直接进行赋值,自动分配了空间的大小。
       int[] arr2 = new int[5];//第二种是直接定义了,一个空间大小为5个整型的空间的大小,并自动初始化为0。
       int[] arr3 = new int[]{1,2,3,4,5};//第三种和第一种其实一样,是第一种的简化。
    }
}

​

如图代码展示的3种定义方法。


2.第二呢,我们来说说他们在内存上的存储。

c语言我们在存储数组是直接用栈来存储的,数组名表示他们的首元素地址,我们可以通过指针来进行访问。

在java中区别可就大了,Java中定义一个整型的数组,比如:int[] arr = {1,2,3,4,5}; 这里arr会被定义到堆中,而里面的元素的地址会被存到栈中,arr指向栈中他们的地址,因此在java中数组是引用变量类型。


图解:


那我们想一个问题那如果我们在对数组传参的时候,改变参数会不会改变其本身呢?

例如:

import java.util.Arrays;
public class Main {
    public static void func(int[] arr2){
        for(int i = 0; i < arr2.length; i++){
            arr2[i] = arr2[i] + 1;
        }
        System.out.print(Arrays.toString(arr2));
    }
    public static void main(String[] args) {
       int[] arr1 = {1,2,3,4,5};
       func(arr1);
       System.out.println();
       System.out.print(Arrays.toString(arr1));
    }
}

这个例子小伙伴们可以思考一下打印出来的结果是多少。


结果如下:


图解分析:


这里传的都是引用变量类型,如图所示传的形参产生的地址和原参数一样,因此会改变内部的值。

但是也不是传了引用,就一定能改变实参的值,要看形参干了什么。

还有上面代码中使用了一个方法 Arrays.toString(),这个方法会将数组转换成字符串。


2.二维数组


二维数组其实是一种特殊的一维数组,在定义的时候不能省略行,而c语言不能省略列,

那怎么定义的呢。

如下代码:

public class Main {
    public static void main(String[] args) {
      int[][] arr1 = {{1,2,3},{4,5,6}};
      int[][] arr2 = new int[][]{{1,2,3},{4,5,6}};
      int[][] arr3 = new int[2][3];//默认初始化为0。
    }
}

这是定义的三种格式。


关于二维数组的内存储存格式;例如定义一个 int[][] array = {{1,2,3},{4,5,6}};

如图:

这里array[0] 就是指向栈区的0X98  array[1]指向栈区的0X78。

 array[0]是在堆区的,在这里对比c语言,c语言是使用指针访问下标来实现。

这里的array[] 就是存放地址的。

如代码:

public class Main {
    public static void main(String[] args) {
      int[][] arr = new int[2][3];
      System.out.println(arr[0]);
    }
}


这里一维数组和二维数组基本就介绍完了,

感谢大家学习我的博客。


  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值