A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

zhangpengyu321

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:


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";
                }
               

}
数组的数值会被改变,字符串不会,请问一下整个过程堆栈操作原理。

5 个回复

倒序浏览
因为String为最终final类,一旦初始化就不能更改啊。
回复 使用道具 举报
因为你打印的并不是同一个对象
String类型的对象并不能被修改,
  1. s = "abcd";
复制代码
这一句其实是重新new了一个对象

回复 使用道具 举报
  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.         }
复制代码



这样不知道你是否理解更容易点
回复 使用道具 举报
恩 明白了
回复 使用道具 举报
int[] num = new int[]{1,2};这个编码看起来很不舒服,要是数组是静态初始的话,最好这样编写: int[] m={1,2};看起来会舒服好多
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马