String字符串练习题
1、下面代码的运行结果为
public class A {
public String str = new String("hello");
public char[] ch = {'t','e','s','t'};
public void change(String str, char ch[]){
str = "hello world";
ch[0] = 'b';
}
public static void main(String[] args) {
A st = new A();
st.change(st.str, st.ch);
System.out.println(st.str);
System.out.println(st.ch);
}
}
通过传参局部变量ch获取了st.ch的地址,更改了字符数组中ch[0]的值,str虽然也获取了st.str的地址,但是由于字符串的不可变性(不改变原字符串,在新的地址生成新的字符串),使得字符串常量池中新生成的hello world与原hello字符串的地址不同,并把新的地址传递给局部变量str,当结束调用change方法,局部变量被销毁,st.ch和st.str仍然是原来的地址,st.ch的值被改变,而st.str由于字符串的不变性没有被改变,所以最终得到hello和best
答案:
hello
best
2.下面代码的运行结果为
public class B {
public static void main(String[] args) {
String s1 = "Hello";
String s2 = "World";
String s3 = "HelloWorld";
String s4 = "Hello" + "World";
String s5 = s1 + "World";
String s6 = "Hello" + s2;
String s7 = s1 + s2;
System.out.println(s3 == s4);
System.out.println(s3 == s5);
System.out.println(s3 == s6);
System.out.println(s3 == s7);
System.out.println(s5 == s6);
System.out.println(s5 == s7);
String s8 = s1+s2;
System.out.println(s7==s8);
}
}
答案:
true
false
false
false
false
false
false