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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王广彬 中级黑马   /  2012-8-21 00:41  /  1827 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Turn{
public void turn(String sb){
  String[] str=sb.split(" ");    //把字符串sb以空格为分割点分成字符串数组
  int[] arr = new int[str.length];
  StringBuilder builder=new StringBuilder();//???????????为什么不能写成StringBuilder builder=null;
  for(int i=0;i<str.length;i++){     
   arr[i]=Integer.parseInt(str[i]);    //把字符串数组转换成整型数组
  }
  arraySort(arr);
  for(int i=0;i<arr.length;i++){
   builder.append(arr[i]).append(" ");
  }
  builder.toString().trim();
  System.out.println(builder);
}
public int[] arraySort(int[] ar){
  for(int i=0;i<ar.length-1;i++){
   for(int j=i+1;j<ar.length;j++){
    if(ar[j]<ar[i]){
     int temp=ar[j];
     ar[j]=ar[i];
     ar[i]=temp;
    }
   }
  }
  return ar;
}
}
public class Practice3 {
public static void main(String[] args) {
  String s="48 -1 23 0 43 8 36";
  Turn t=new Turn();
  t.turn(s);
}
}
为什么不能写成StringBuilder builder=null;



评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
StringBuilder是一个可变的字符序列,是 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用,在实现过程中比StringBuffer 要快。
不论是在单线程中创建StringBuilder还是在多线程中创建StringBuffer,都是为了提高效率。StringBuilder builder=new StringBuilder()传递的是
需要被提高效率的对象,如果直接写StringBuilder builder=null;这句代码存在又有什么意义呢?除非在异常处理时try代码块外定义StringBuilder builder=null;
但是在try代码块中需要写builder = new StringBuilder()并传递相应对象

我自己的理解,你可以参考一下

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
StringBuilder builder=null                                 表示 StringBuilder没有创建对象,在内存中没有申请到地址,这个没有产生对象的builder是不可用的
而StringBuilder builder= new StringBuilder() ;     虽然builder里边也没有东西,但在内存中可以使用了,只不过内容是一个空字符串 "" ,等待被添加而已.
                                                                  
你这个问题跟他的很有相似性
http://bbs.itheima.com/thread-22902-1-1.html  希望这样解答你能看的清楚明白一些
回复 使用道具 举报
直接写的话对象没有创建,这个是初学者最容易犯得错误,经常就是空指针。应为对象更本就没有创建,引用对象的方法和成员肯定是空指针。所以使用一个对象前一定要记得是否需要new出该对象。
回复 使用道具 举报
Java编译器自动根据成员变量类型对其赋默认值进行初始化
方法中定义的变量要手动初始化,来创建对象,才能通过对象调用非静态方法
StringBuilder builder=null;只是定义了一个变量,初值为null,没有产生新对象builder
当直接用builder调用方法时就会引发空指针异常
所以用new创建一个新对象new StringBuilder()
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马