一文搞定Java数组与字符串

一.数组

在Java中,二维数组(也称为数组的数组)的声明通常涉及两个步骤:首先声明数组的类型和变量名,然后初始化该数组。对于二维数组,您需要指定外部数组的长度(即行数),但内部数组(即列)的长度可以动态指定。

下面是如何在Java中声明和初始化二维数组的例子:

1. 声明一个未初始化的二维数组

int[][] array; // 声明一个二维数组,但尚未初始化

2. 声明并初始化一个固定大小的二维数组

如果您知道所有行和列的确切大小,您可以像这样初始化二维数组:

int[][] array = new int[3][4]; // 创建一个3行4列的二维数组

在上面的例子中,array是一个包含3个元素的一维数组,每个元素都是一个包含4个整数的数组。

3. 声明并初始化一个不规则大小的二维数组

如果您不知道所有列的大小,但知道行数,您可以像这样初始化二维数组:

int[][] array = new int[3][]; // 创建一个有3行的二维数组,列数稍后指定

// 现在初始化每一行
array[0] = new int[2]; // 第一行有2列
array[1] = new int[3]; // 第二行有3列
array[2] = new int[1]; // 第三行有1列

在上面的例子中,array是一个包含3个元素的一维数组,但每个元素(即每一行)的长度是不同的。

4. 在类中声明和初始化二维数组

如果您想在类的成员变量中声明和初始化二维数组,可以在构造函数或初始化块中完成初始化:

public class TwoDArrayExample {
    private int[][] array;

    public TwoDArrayExample() {
        // 初始化二维数组
        array = new int[3][];
        array[0] = new int[2];
        array[1] = new int[3];
        array[2] = new int[1];
    }

    // 其他方法和成员变量...
}

在这个TwoDArrayExample类中,我们在构造函数中初始化了array这个二维数组。这样做是Java类设计的常见做法。

请注意,在类的成员变量声明中直接初始化数组(如int[][] young = new int[MaxLine][];)是不允许的,因为这不是有效的Java语法。成员变量的初始化应该放在构造函数、初始化块或静态初始化块中。

二.字符串

equals() 方法是 Object 类的一个方法,但它在 String 类中被重写了以提供字符串内容比较的功能。equals() 方法用于比较两个字符串对象的内容是否相同,而不是比较它们的引用是否指向同一个对象(这是“==”运算符的功能)。
String 对象是不可变的,==即一旦创建了一个 String 对象,其内容就不能被改变。==每次对 String 的修改(如 concatsubstring 等方法)都会创建一个新的 String 对象
StringBuffer 是一个可变的字符序列,可以通过其提供的方法(如 appendinsertdelete 等)来修改其内容。修改操作不会创建新的对象,而是在原对象的基础上
为了输出StringBuffer的内容,你需要显式地调用toString()方法;
Java中的String对象是不可变的(immutable),这意味着一旦一个String对象被创建,它的内容就不能被改变。任何看似修改String对象内容的操作实际上都会创建一个新的String对象。但是,当您看起来在修改 Demo 类的 temp 字段时,您实际上并没有修改原始的 String 对象,而是让 temp 引用指向了一个新的 String 对象。

Demo d1 = new Demo();
d1.temp = "World"; // 这里 d1.temp 现在引用了一个新的 String 对象,内容为 "World"
fun(d1);

在调用 fun 方法时:

public static void fun(Demo d2) {
    d2.temp = "MLDN"; // 这里 d2.temp(也就是 d1.temp,因为它们是同一个对象的引用)现在引用了一个新的 String 对象,内容为 "MLDN"
}

您并没有修改原始的 "Hello" 字符串或 "World" 字符串的内容,而是让 d1.temp 引用指向了一个新的字符串 "MLDN"

因此,尽管 String 是不可变的,但您可以更改一个变量(例如 d1.temp)以引用不同的 String 对象。这就是为什么在您的代码中,d1.temp 的值从 "World" 变为 "MLDN" 的原因。
String 方法

名称解释
String replace(char oldChar, char newChar);将接收者字符串中的oldChar替换为newChar
int compareTo(String s);将接收者对象与参数对象s进行比较(基于字典顺序)
boolean equals(String s);将接收者对象与参数对象s的值进行比较(是否相等)
String trim( );移除接收者字符串两端的空白字符(包括空格、制表符、换行符等)
String toLowerCase()将接收者字符串中的所有字符转换为小写
String toUpperCase()将接收者字符串中的所有字符转换为大写
int length( )返回接收者字符串中字符的个数
char charAt(int index)返回接收者字符串中序号为index的字符
int indexOf(String s)在接收者字符串中查找子字符串s,如果找到则返回匹配的第一个字符的索引,否则返回-1
String substring(int begin, int end)返回接收者字符串中从索引begin开始到end-1的子字符串
public String[] split(String regex)以指定的正则表达式regex为分隔符,分解接收者字符串为字符串数组
public String[] split(String regex, int limit)以指定的正则表达式regex为分隔符,并限制分解的最大数组长度为limit,分解接收者字符串为字符串数组
String concat(String s)将接收者字符串与参数字符串s连接,并返回新的字符串
StringBuffer类的常用方法
名称解释
int length ( )返回字符串对象的长度
int capacity( )返回字符串对象的容量
void ensureCapacity(int size)设置字符串对象的容量
void setLength(int len)设置字符串对象的长度。如果len的值小于当前字符串的长度,则尾部被截掉
char charAt(int index)返回index处的字符
void setCharAt(int index, char c)index处的字符设置为c
void getChars(int start, int end, char [ ] charArray, int newStart)将接收者对象中从start位置到end-1位置的字符拷贝到字符数组charArray中,从位置newStart开始存放
StringBuffer reverse( )返回将接收者字符串逆转后的字符串
StringBuffer insert(int index, Object ob)ob插入到index位置
StringBuffer append(Object ob)ob连接到接收者字符串的末尾
  • 35
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值