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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 正阳门下 中级黑马   /  2016-1-21 01:33  /  981 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public static void main(String[] args) {
                StringBuilder sb = new StringBuilder();
               
                sb.append("abc");
               
                insert(sb);
               
                System.out.println(sb);
        }

        public static void insert(StringBuilder sb) {
                sb.append("def");
                sb = null;
        }
大神请告诉我为啥不是null呢

9 个回复

倒序浏览
骚等我来画个内存图给你解释
回复 使用道具 举报
C:\Users\jiayu\Desktop\expression.jpg
回复 使用道具 举报
图片来了

expression.jpg (19 KB, 下载次数: 26)

expression.jpg
回复 使用道具 举报
能看的清楚么?

expression.jpg (19 KB, 下载次数: 20)

expression.jpg
回复 使用道具 举报
  1. class Test{
  2. public static void main(String[] args) {
  3.                 StringBuilder sb = new StringBuilder();
  4.                
  5.                 sb.append("abc");
  6.                 //sb=null;  题外话:但是如果将null赋值给包装类object,然后将object赋给各自的基本类型,编译器不会报,但是你将会在运行时期遇到空指针异常。
  7.                 insert(sb);
  8.                
  9.                 System.out.println(sb);
  10.         }

  11.         public static void insert(StringBuilder sb) {
  12.                 sb.append("def");
  13.                 sb = null;//使用静态方法来使用一个值为null的引用类型变量。因为静态方法使用静态绑定,不会抛出空指针异常。
  14.                                  //让一个非null的引用类型变量指向null,等待JVM垃圾回收机制去回收,内存中的内容任然存在。
  15.                                 //在sb被回收前,sb的内容能被打印出来。
  16.                                 //你可以试试其它的引用类型变量赋值后指向null;我试过数组也能打印出来。
  17.         }  
  18. }
复制代码
回复 使用道具 举报
西贝 发表于 2016-1-21 10:39
能看的清楚么?

看的不是很清楚,但是基本上看明白了,谢谢
回复 使用道具 举报
回复 使用道具 举报
支持4楼
回复 使用道具 举报
好难,输出的结果是什么啊?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马