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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 史政法 于 2013-4-3 05:17 编辑
  1. import java.util.*;

  2. class  Demo
  3. {
  4.         public static void sop(Object obj)
  5.         {
  6.                 System.out.println(obj);
  7.         }

  8.         public static String s = "vcz1bdAa+cs";

  9.         public static void main(String[] args)
  10.         {
  11.                 sop(s);
  12.                 sort(s);//这句话执行完后,为什么执行完的结果没有被记录下来,而是在内存中释放了?
  13.                 sop(s);
  14.         }

  15.         public static void sort(String s)
  16.         {
  17.                 //将字符串转换成字符数组
  18.                 char[] ch = s.toCharArray();
  19.                 //对数组进行排序
  20.                 Arrays.sort(ch);
  21.                 //将排序好的数组转成字符串。
  22.                 s = String.valueOf(ch);

  23.                 //这个打印可以说明,这个函数确实进行了转换动作,但是为什么转换完后,结果没有被保存下来,而是在内存中被释放了?
  24. //一直操作不都是s吗?为什么没有赋值给s?
  25.                 sop(s);
  26.         }
  27. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

8 个回复

正序浏览
王亚东 发表于 2013-4-1 19:11
String是不可变字符序列,在sort方法中 s = String.valueOf(ch);
s作为局部变量指向了新的字符串(地址)
...

受教了,哥们,楼下说局部和全局变量的都是渣渣,,,,,,,
回复 使用道具 举报
成员变量和局部变量的作用域没弄明白啊,局部变量s只在方法内有效,出了方法后,就被释放,你的局部变量s是引用型的数据,出了方法后,就丧失了该对象的引用,对象等待垃圾收集器来回收他,释放内存,就是这么回事
回复 使用道具 举报
史政法 发表于 2013-4-1 19:11
但是不是一直操作的是变量s么?为什么操作完后却没有给s赋值?而我还特意写了赋值的。 ...

兄弟啊!你没有分清楚局部变量与全局变量啊!你传进来的是s字符串的副本,跟全局的s没有关系。所以不是
没有给s赋值,你在sort( )函数里面已经输出了赋值以后的结果了,但是你再调用传进sop( )函数的还是全局的s。明白了 ?不明白建议你学习下怎么划分内存。
回复 使用道具 举报
本帖最后由 李尧 于 2013-4-1 21:42 编辑

卤煮,我仔细想了一下,好像是因为值传递.
你在sort方法里的s实际上一个副本,他也指向了同一个String对象.
而String是不可变的,你最终的赋值操作是将s的副本指向了重新排序的字符串,对原来的String对象并没有影响,也没有改变原String的指向.
我了个去...怎么感觉这么拗口..
回复 使用道具 举报
同问....
回复 使用道具 举报
似水像火 发表于 2013-4-1 19:04
java的运行机制,java中有个垃圾回收机制....
你能理解局部变量运行结束后就会被内存释放吗?
这个和那个差 ...

但是不是一直操作的是变量s么?为什么操作完后却没有给s赋值?而我还特意写了赋值的。
回复 使用道具 举报
String是不可变字符序列,在sort方法中 s = String.valueOf(ch);
s作为局部变量指向了新的字符串(地址)
回复 使用道具 举报
java的运行机制,java中有个垃圾回收机制....
你能理解局部变量运行结束后就会被内存释放吗?
这个和那个差不多的...
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马