1 String StringBuffer 和 StringBuilder 的区别是什么?
String是只读字符串,它并不是基本数据类型,而是一个对象。从底层源码来看是一个final类型的字符数组,所引用的字符串不能被改变,一经定义,无法再增删改。每次对String的操作都会生成新的String对象.
每次+操作 :隐式在堆上new了一个跟原字符串相同的StringBuilder对象,再调用append方法 拼接+后面的字符。
StringBuffer与StringBuilder都继承了AbstractStringBqaulder类,而AbtractStringBuilder又实现了CharSequence接口,两个类都是用来进行字符串操作的。
在做字符串拼接修改删除替换时,效率比string更高。
StringBuffer是线程安全的,Stringbuilder是非线程安全的。所以Stringbuilder比stringbuffer效率更高,StringBuffer的方法大多都加了synchronized关键字
2 创建字符串
字符串广泛应用在 Java 编程中,在 Java 中,字符串是表示字符序列的对象。
Java 提供了 String 类来创建和操作字符串。
创建字符串最简单的方式如下:
String s = "Hello zgl!";
在代码中每遇到一个字符串时,编译器会在这种情况下创建一个String对象,如:"Hello W3Cschool!"。
“+”运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行连接。
3 连接字符串
在 Java 中,使用 '+' 操作符来连接字符串。
下面是一个例子:
int a=12; System.out.println("a="+a);//输出结果: a=12
运行效果:
4 String str=”aaa”,与String str=new String(“aaa”)一样吗?
不一样,因为内存的分配方式不一样。String str="aaa"的方式,Java 虚拟机会将其分配到常量池中;而 String str=new String(“aaa”) 则会被分到堆内存中。
5 String str=”aa”,String s=”bb”,String aa=aa+s;一种创建了几个对象?
一共有两个引用,三个对象。因为”aa”与”bb”都是常量,常量的值不能改变,当执行字符串拼接时候,会创建一个新的常量是” aabbb”,有将其存到常量池中。
6 String文件类型判断
package test.string; import java.util.Arrays; import java.util.List; public class GetFileType { private static List<String> accTypes = Arrays.asList("jpg","bmp","gif","doc","docx","rar"); public static void main(String[] args){ for(String arg:args){ String type = getFileType(arg); if(accTypes.contains(type)){ System.out.println(arg+"后缀合法"); }else{ System.out.println(arg+"后缀不合法"); } } } /** * 获取文件后缀名 * @param filename * @return */ public static String getFileType(String filename){ int pos = filename.lastIndexOf("."); if(pos == -1){ return null; } return filename.substring(pos+1); } }