读《第一行代码“java”》学习笔记之面向对象的基本概念(三)

数组


基本概念

数组是数据的集合。若想定义n个int类型变量,传统的方法会是这样:

int a1 , a2 , a3 , ... , an;

这样也能打到定义多个变量的目的,但是这多个变量是相互独立的个体,本身并没有所谓关联性,当变量的数量足够多时,就会出现不便于管理的情况。这时就会利用到数组,数组本身也属于引用数据类型,定义语法如下:

数据类型 数组名称[] = new 数据类型[长度];
数据类型 [] 数组名称 = new 数据类型[长度];

创建数组后如何对数组的内容进行访问呢?
对数组内容的访问可以以“数组名称[索引/下标]”的方式进行访问,所有的下标均以0开始,若有一个长度为4的数组int An[] = new int[4],那么它的第一个元素就是An[0],第四个则是An[3]。首次定义数组时,其数据值均为对应数据类型的默认值,如int类型就是0。

接下来提供一个例子用于演示在java中对数组的定义与访问:

public class Test {
    public static void main(String args[])
    {
        int An[] = new int[3];
        An[0] = 0;
        An[1] = 1;
        An[2] = 2;
        for (int i = 0;i<3;i++)
        {
            System.out.println(An[i]);
        }
    }
}

结果如下:

0
1
2

进程已结束,退出代码0

数组定义时还提供了静态初始化的操作,让数组定义时就设置好了相应的内容,例如上文的:

...
An[0] = 0;
An[1] = 1;
An[2] = 2;
...

就可以在定义时改成:

int An[] = {0,1,2};
//或者是
int An[] = new int[] {0,1,2};

当数组较多且长度不相同时该怎么办,总不能专门开个表格来记录对应数组的长度吧?根本没必要,Java提供了代表数组长度的属性length,使用这个属性的方法很简单,只需要写数组名称.length即可。它的含义就是对应数组的长度,上文中的循环条件也可以改成:

public class Test {
    public static void main(String args[])
    {
    
	...
        for (int i = 0;i<An.length;i++)
        {
            System.out.println(An[i]);
        }
    }
}

效果是一样的,篇幅有限,就不做结果的演示了
顺带一提,当你访问时所用的下标超过了数组的长度,就会出现数组越界异常(Array Index Out Of Bounds Exception),所以可以用.length对引用时的索引进行限制,防止出现异常。

数组的引用传递

数组本身属于引用数据类型,在对其进行操作的过程中依然可以进行内存的引用传递:

public class Test {
    public static void main(String args[])
    {
        int An[] = new int[3];
        int NTR[] = An;
        An[0] = 0;
        An[1] = 1;
        An[2] = 2;
        NTR[0] = 1;
        for (int i = 0;i<An.length;i++)
        {
            System.out.println(An[i]);
        }
    }
}

运行结果:

1
1
2

进程已结束,退出代码0

可以看到,虽然我们没有对An[0]进行后续的修改,却通过先使NTR[]指向An[]对应的堆内存,然后在对NTR[0]进行修改,从而达到修改对应内存中第一个元素的目的

二维数组

当需要管理更为复杂的数据时,二维数组就可以派上用场了。
一维数组是一个索引对应一个数据,如前文的NTR[]就可以这样理解

索引012
数据112

二维数组则是两个索引对应一个数据

索引012
0a[0][0]a[1][0]a[2][0]
1a[0][1]a[1][1]a[2][1]
2a[0][2]a[1][2]a[2][2]

也可以简单理解成是“一维数组”的数组。
二维数组的定义有以下两种方法,跟之前的一维数组定义方法非常相似:

  • 动态初始化: 数据类型 数组名称[][] = new 数据类型 [行][列]
  • 静态初始化: 数据类型 数组名称[][] = new 数据类型 [][]{{多个值},{多个值},...}

二维数组元素的访问与一维数组一致,这里不做过多赘述。


String 类

String 类的基本概念

String是字符串的描述类型,在实际开发中用途非常广泛。String本身不是引用数据类型,但依旧可以对其进行直接赋值。

String 类的两种实例化方式

  • 直接赋值:String 变量名 = "字符串"
  • 构造方法赋值:String 名称 = new String("字符串")

字符串比较

在比较int类型数据时,我们通常会用表达式a == b来判断两个数据是否相等
但在比较字符串时,如果使用==来判断,会遇到一些问题,看下面的例子:

public class Test {
    public static void main(String args[])
    {
        String str1 = "str";
        String str2 = new String("str");
        String str3 = str2;
        System.out.println(str1 == str2);
        System.out.println(str1 == str3);
        System.out.println(str2 == str3);
    }
}

运行结果:

false
false
true

进程已结束,退出代码0

明明内容完全一致,但用==对比之后的结果却是大相径庭,这是怎么回事呢?原因在于==对比判断的是对应对象的地址值,而不是内容。如果想比较字符串的内容则需要String类下的equals方法。
equals方法的用法为:如有两个String类的对象str1、str2,则str1.equals(str2)可以将str1、str2进行内容的比较

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值