Java中字符数组与字符串的转换方法

本文主要讲述Java中char数组(字符数组)与字符串String类型的转换方法。

在实际应用中,当输入是一个char类型的数组,或者操作结果返回的是一个字符数组,我们经常需要将这个数组转换为String类型,以便进行诸如口令匹配或口令赋值等操作,比如使用“口令字段“jPasswordField组件获得密码值。这时,就需要将char类型的数组进行转换。另外,也有字符串转换成char数组的情况。

字符串转字符数组

先看字符串类型转换成char数组,代码如下
代码如下:

	String myString = "hello123"; //创建一个字符串变量myString
	char[] myCharArray; //创建一个字符数组myCharArray
	myCharArray = myString.toCharArray(); //将字符串变量转换为字符数组
	for(int i=0; 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。

你可能感兴趣的:(Java)