一.数组
在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
的修改(如 concat
、substring
等方法)都会创建一个新的 String
对象
StringBuffer
是一个可变的字符序列,可以通过其提供的方法(如 append
、insert
、delete
等)来修改其内容。修改操作不会创建新的对象,而是在原对象的基础上
为了输出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 连接到接收者字符串的末尾 |