首页 > 代码库 > 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字符串
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。