码迷,mamicode.com
首页 > 编程语言 > 详细

Java字符串

时间:2016-09-21 01:46:31      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:

字符串在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字符串

标签:

原文地址:http://www.cnblogs.com/xinfengzi/p/5891177.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!