本文主要讲述Java中char数组(字符数组)与字符串String类型的转换方法。
在实际应用中,当输入是一个char类型的数组,或者操作结果返回的是一个字符数组,我们经常需要将这个数组转换为String类型,以便进行诸如口令匹配或口令赋值等操作,比如使用“口令字段“jPasswordField组件获得密码值。这时,就需要将char类型的数组进行转换。另外,也有字符串转换成char数组的情况。
字符串转字符数组
先看字符串类型转换成char数组,代码如下
代码如下:
String myString = "hello123"; //创建一个字符串变量myString
char[] myCharArray; //创建一个字符数组myCharArray
myCharArray = myString.toCharArray(); //将字符串变量转换为字符数组
for(int i=0; i<myCharArray.length; i++) {
System.out.print(myCharArray[i] + " "); //将每个字符打印出来
}
结果:
h e l l o 1 2 3
显然,在转换的过程中用到了字符串的方法toCharArray(),将字符串“hello123”转换成了字符数组。
字符数组转成字符串
char[] str = {'h','e', 'l', 'l', 'o', ' ', '1','2','3'}; //创建一个字符数组
String string1 = new String(str);
String string2 = String.valueOf(str);
System.out.println(string1); //hello 123
System.out.println(string2);
System.out.println(string1 == string2); //false
System.out.println(string1.equals(string2)); //true
在上面的代码中,可以看出char数组转成字符串的方法有两种:
- 一种是直接将字符数组作为参数构造String对象;
- 另一种是使用String的valueOf()方法。
这两种方法得到的字符串都是相同的,但是在上面代码的最后两句:
System.out.println(string1 == string2); //false
System.out.println(string1.equals(string2)); //true
两者的结果不一样,因为在string1 == string2中,比较的是地址,由于string1 和 string2是两个不同的对象,string1是通过new方法创建的,string2是由valueOf()方法返回的对象,所以二者的地址不一样,等式的结果就是false。
而String的equals()方法比较的是值,其源码如下:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
可以看出,String的equals()方法也是通过将字符串拆分成一个一个的字符,再逐一进行比较,所以比较的是值,string1.equals(string2)的结果就是true。