Java基础之数据类型与数组

1.1 数据类型

1.1.1 概述

数据类型决定了数据的存储方式和运算方式

Java中的数据类型分为两个大类:

  • 基本数据类型
  • 引用类型

image-20230314170811591

1.1.2 两种类型的差别
  1. 内存中的存储位置不同:基本类型存储在栈中;引用类型存储在堆中(java中虽然没有指针,但是引用可以看成一个特殊的指针,类比C++中引用的概念)

  2. 赋值的时候有差别:基本类型在赋值时复制的是值;引用类型复制的是引用,例如:

    double d2 = d;	//复制值
    Person p2 = p;	//复制引用
    
    image-20230314171400883

    从上图可以看到,d2复制了d的值;而p2复制了p的引用,二者指向了同一个对象。

1.2 数组

1.2.1 数组概述

数组是多个相同类型数组的组合

一般来说,一维数组的声明方式如下:

  • int[] a;
  • double[] b;
  • MyData[] c;
1.2.2 数组初始化

在Java中,数组定义为数组元素分配空间 分开进行

例如:

int[] a = new int[5];

这是由于Java中数组是引用类型

Java中声明数组时不能指定其长度,这是其与C/C++语言的一大区别。

例如:

int a[5]; //非法

静态初始化:

在定义数组的同时为数组元素分配空间并赋值

例如:

int[] a = {3, 9, 8};	或者 int[] a = new int[]{3, 9, 8};

MyData[] datas = 
{new MyData(22, 7, 1964), 
 new MyData(1, 1, 2000), 
 new MyData(22, 12,1964),};

默认初始化:

数组是引用类型,数组一经分配空间,其中每个元素也被按照成员变量同样的方式被隐式初始化(数值类型被初始化为0,引用类型初始化为null)。

例如:

int[] a = new int[5] //a[3] = 0

1.2.3 数组元素的引用

数组元素的引用方式与C/C++差不多。

数组元素的下标从0开始;长度为n的数组合法下标取值范围:0~n-1

每个数组都有一个属性length指明它的长度,例如:

int[] ages = new int[10];
for(int i = 0; i < ages.length; i++){
	System.out.println(ages[i]);
}
1.2.4 for-each语句

Java中有一种增强的for循环语句,可以用来依次处理数组(或者任何其他元素集合)中的每个元素,而不必考虑指定索引值,使用示例如下:

int[] ages = new int[10];
for(int age : ages){
	System.out.println(age);
}

需要注意的,这种语句是只读式遍历

解释以下,这里的只读式遍历有两种情况:
如果遍历的是基本数据类型的数组,那么不能改变数组的值;
如果遍历的是引用数据类型的数组,那么可以改变对象的属性,但不能删除或添加对象。
可以类比C/C++中的值传递与指针传递的情况,值传递的时候你在函数内部改变形参不会影响实参,指针传递的时候可以改变指针指向的实参,但不能改变指针的指向,因为函数传参的本质是复制出一个参数的副本,对于副本的修改不会影响原来的参数。

1.2.5 复制数组

在Java中,允许将一个数组变量拷贝到另一个数组变量,这时,两个变量将引用同一个数组:

int[] ages = {12, 13, 14};
int[] ages2 = ages; 	//ages2和ages引用同一个数组

下图是拷贝的结果:

image-20230314151330007

如果你希望将一个数组的所有值拷贝到一个新的数组中,就需要使用Arrays类中的copyOf方法:

int[] ages2 = Arrays.copyOf(ages, ages.length);

Arrays.copyOf的第二个参数是新数组的长度,这个方法可以用于增加数组的大小:

int[] ages2 = Arrays.copyOf(ages, 2 * ages.length);

新增的元素按照默认初始化。

注意区分=拷贝和Arrays.copyOf()拷贝的区别

1.2.6 多维数组

多维数组这里以二维数组为例,Java中的二维数组是数组的数组,我们可以采用如下的方式进行声明和初始化:

//第一种方式
int[][] t = new int[3][3];

//第二种方式
int[][]	t = new int[3][];
t[0] = new int[2];
t[1] = new int[4];
t[2] = new int[3];	//java中的二维数组是数组的数组,其中数组的长度不必相同,这里与c++不同

//第三种方式
int[][] t =
{
	{123}{456}{789}
}

注意体会java中的多维数组与C/C++的区别,java中多维数组的声明和初始化应该按照从高维到低维的顺序进行,例如以下声明和定义就是非法的:

int[][] t1 = new int[][4] //非法,与C++不同
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值