首页 > 代码库 > Java字符串

Java字符串

字符串在Java中是非常常见的,但是看似简单常见的字符串,往往在有些地方很容易被它迷惑,下面举一个例子

 1 public class Demo4 { 2     public static void main(String[] args){ 3         String str = "hello"; 4         chang(str); 5         System.out.println(str); 6     } 7      8     public static void chang(String s){ 9         System.out.println(s);10         s = s + "!";11         System.out.println(s);12     }13 }

可能有的人认为通过执行change(str)后,s的值为"hello!",但实际上并不是。下面是运行结果

hello
hello!
hello
对于这个结果,大家不必吃惊,其实仔细想想的话还是不难理解的。我从两个方面来说明。第一,回到字符串String的定义,一个字符串对象的值是由其value决定的,而在String的定义中value成员是被final修饰了的,也就是说字符串对象一旦创建后,其值就确定了,不能改变了;第二,我们来看这个例子的代码,主函数中str指向了"hello"这个对象(在常量区),然后调用change方法时,change方法压栈,在change方法中,有一个局部变量s来接受调用者的传值(即实参),因此,s的值和str的值一样,同样指向了"hello"字符串对象,但是执行s = s + "!";这句代码后,代码的右边生成一个新的字符串对象"hello!"并把地址返回给s,因此此时s不再指向原先的字符串对象"hello"!然后change函数执行完弹栈,接着主函数执行打印str,但是str的值并没有变,他仍然指向"hello"字符串对象,因此打印的结果是"hello"。

注:本文来源于对杨元的博客的整理,文中若有不当之处,还请多多指正!

 

Java字符串