黑马程序员技术交流社区

标题: Java在方法中修改字符串和数组数值区别 [打印本页]

作者: zhangpengyu321    时间: 2014-5-12 13:52
标题: Java在方法中修改字符串和数组数值区别

public class Other {
       
                public static void main(String[] args) {
                                 int[] num = new int[]{1,2};
                                 int a = 1;
                                 String s = new String("abc");
                                 method(a,num,s);
                                 System.out.println(a);
                                 System.out.println(num[1]);
                                 System.out.println(s);
                }

                public static void method( int a,int[] x, String s){
                          a = 2;
                         x[1] = 50;
                         s = "abcd";
                }
               

}
数组的数值会被改变,字符串不会,请问一下整个过程堆栈操作原理。
作者: 大恶魔先森~    时间: 2014-5-12 17:56
因为String为最终final类,一旦初始化就不能更改啊。
作者: 247033993@qq.co    时间: 2014-5-12 17:56
因为你打印的并不是同一个对象
String类型的对象并不能被修改,
  1. s = "abcd";
复制代码
这一句其实是重新new了一个对象


作者: 247033993@qq.co    时间: 2014-5-12 17:58
  1. public static void main(String[] args) {
  2.                 // TODO Auto-generated method stub
  3.                 String s=new String("abc");
  4.                 System.out.println(s.hashCode());
  5.                 method(s);
  6.                 System.out.println(s.hashCode());
  7.         }
  8.         public static void method(String s){
  9.                
  10.                 s="abcd";
  11.                 System.out.println(s.hashCode());
  12.         }
复制代码



这样不知道你是否理解更容易点
作者: 张鹏宇    时间: 2014-5-12 21:09
恩 明白了
作者: 宋健敏    时间: 2014-5-12 22:21
int[] num = new int[]{1,2};这个编码看起来很不舒服,要是数组是静态初始的话,最好这样编写: int[] m={1,2};看起来会舒服好多




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2