1.什么时候用StringBuilder?
颜sir,我好像只在“面试宝典”中看到过StringBuilder,其余时间都没有使用过。什么时候会用到StringBuilder呢?
答:String的引用值不能改变,因此如果遇到类似以下频繁更改String引用值的时候,就需要考虑使用StringBuffer或StringBuilder。
String str = "" ;
for(int i=0;i<1000;i++){
str += i ;//str的指向会更改1000次
}
到底用StringBuffer还是StringBuilder?答案其实就像“鱼和狮子谁适合游泳?”一样。鱼的特点是游泳、狮子的特点是凶猛,因此只需要看看每个类的【特点】,自然就知道答案了。
StringBuffer:线程安全
StringBuilder: 非线程安全
因此,如果作为一个方法的局部变量,就更适合使用StringBuilder。因为是在一个方法的内部,被多个线程共享的概率低;而如果是所有方法共享的全局变量、或者高并发经常访问的某个变量,就适合用StringBuffer,保证线程安全。
2.服了,list.add()也会报错!!!
public static void main(String[] args) {
String[] names = {"zs","ls","ww"} ;
List<String> nameList = Arrays.asList(names);
nameList.add("zl") ;
}
代码第三行,竟然报这个异常???
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:148)
at java.util.AbstractList.add(AbstractList.java:108)
at SingletonD.main(SingletonD.java:24)
答:异常已经说的很明白了,UnsupportedOperationException,翻译过来就是:不支持的操作。你也说的很明白了,第三行报错。结合起来就是:第三行add()是一个不支持的操作。为什么呢?因为Arrays.asList()的返回值ArrayList并你心里所想的那个ArrayList。什么意思?在JDK中有很多个ArrayList类型,Arrays.asList()返回的ArrayList实际是Arrays的一个内部类ArrayList(即,不是Collection中常见的那个ArrayList)。这个内部类ArrayList的方法列表如下,可见根本不支持add()方法。
3.Java中有引用传递吗?
答:没有,在Java中只有值传递(Pass By Value)。文字说起来太费劲,直接看视频吧
https://www.bilibili.com/video/av53951575?p=35