1. 怎么确保一个集合不被修改
Collections的unmodiableList(); unmodiableMap(); unmodiableSet();
2. replace 和 replaceAll的区别
相同点:都是全部替换,即把源字符串中的某一字符或字符串全部换成指定的字符或字符串;
不同点:replaceAll支持正则表达式,因此会对参数进行解析(两个参数均是),如replaceAll("\d", "*"),而replace则不会,replace("\d","*")就是替换"\d"的字符串,而不会解析为正则。
另外还有一个不同点:“”在java中是一个转义字符,所以需要用两个代表一个。例如System.out.println( "\" ) ;只打印出一个""。但是“”也是正则表达式中的转义字符,需要用两个代表一个。所以:\\被java转换成\,\又被正则表达式转换成,因此用replaceAll替换“”为"\",就要用replaceAll("\\","\\\\"),而replace则replace("\","\\")。
如果只想替换第一次出现的,可以使用replaceFirst(),这个方法也是基于规则表达式的替换,但与replaceAll()不同的是,只替换第一次出现的字符串。
3. 自动装箱与自动拆箱
装箱:基本类型转换为包装类型,例如:Integer i = 1,其实是 Integer i = Integer.valueOf(i);
拆箱:包装类型转换为基本类型,例如:int x = i ,其实是 int x = i.intValue(); 就是包装器类型.xxxValue()。
补充:基本类型和包装类型用==比较时,包装类型会自动拆箱为基本类型,所以实际就是两个基本类型在比较
4. final和static的区别
相同:可以修饰类,成员属性,方法。修饰的方法都不能被重写。都不能修饰构造方法
不同:static可以修饰代码块,final不行。final可以修饰方法内的局部变量,static不可以
5. 操作字符串都有哪些类
String:String类的方法都是返回 new String。对String的任何修改都不影响到原对象,对字符串的修改操作都会生成新的对象所以效率低
StringBuffer:对字符串的操作方法都加了synchronize,保证线程安全
StringBuilder:相比StringBuffer效率高,不保证线程安全。如果对某个字符串频繁的修改操作,不推荐使用String去操作