请问是如何赋值的,这样赋值好么?

public class StartCmd {

public static void setStringBuilder(StringBuilder sbul) {
sbul.append("asd");
}

public static void main(String[] args) {  

StringBuilder sbull = new StringBuilder(); 
StartCmd.setStringBuilder(sbull); 
System.out.println(sbull.toString()); 

}

}
输出:asd
请问sbull是如何被赋值的,这样赋值好么,多谢?

内部实际上是个char的数组
StringBuilder sbull = new StringBuilder(); //创建, 内容为[]
StartCmd.setStringBuilder(sbull); //sbull追加了"asd",[a,s,d]
System.out.println(sbull.toString()); //打印后,tostring为"asd"

setStringBuilder方法只是根据传入的引用,在后面追加了"asd",没什么好不好的

如果要注意,那么就是要对sbul引用是否为空进行判断,如下:
public static void setStringBuilder(StringBuilder sbul) {
if(null == sbul) {
sbul = new StringBuilder("asd");
return;
}
sbul.append("asd");
}

参考下

String与StringBuilder的区别
http://chenguanwei2008.iteye.com/blog/438554

1楼的回答其实是很好的
但是我怀疑你是不是要这样的答案:

StringBuilder sbull = new StringBuilder();    StartCmd.setStringBuilder(sbull);  
//这里调用了当前类的一个静态方法 该方法参数是一个StringBuild 调用的时候将sbull 传过去 就相当于操作  sbull 其实完全可以写成这样:

  public static void main(String[] args) {  

StringBuilder sbull = new StringBuilder(); 
sbull.append("asd");
System.out.println(sbull.toString()); 

}

[code="java"]StringBuilder [/code]和 [code="java"]StringBuffer[/code]类似
区别是 [code="java"]StringBuffer [/code]是线程安全的 ,[code="java"]StringBuilder [/code]不支持同步

[code="java"]StringBuilder sbull = new StringBuilder(); //在内
//存中开辟字符串缓冲区 默认值为空 "" 所以赋值应该是在这里
[/code]

[code="java"]append(String str); //该方法将指定字符串追加到字符序列里 进行了修改[/code]