【每天十分钟JAVA快速入门】(四)字符串
字符串
字符串是Java中使用频率最高的一种类型,但它不是Java基本数据类型之一,它是Java类库中预定义的一个类(String),可以使用双引号来得到字符串的实例。例如:
String message = "0123456";
不可变
String类对象是不可变的,String类中没有提供任何用于修改字符串的方法。需要认识到的是Java中的String并不是一个char[],并不能通过修改字符串中任意位置的字符来得到一个新的字符串。不可变字符串到底有什么好处呢?一个重要的优点就是可以共享。
提取
可以使用String类的substring方法来从一个字符串中提取一部分字符来获得一个新的字符串。例如:
String message = "0123456";
String subMessage = message.substring(1,5);
第一个参数是起始位置,位置的编号从0开始,这个比较好理解。第二个参数是截至位置的编号,但不包含。上面这段代码运行结果 subMessage = "1234"
拼接
Java中可以使用加号(+)将两个字符串拼接起来,如果其中有一个非字符串的值,那么它将会被自动转为字符串。例如:
int point = 99;
String result = "result:" + point;
如过需要将一系列字符串使用某种分割符拼接起来可以使用静态方法String.join,例如:
String letters = String.join(",","A","B","C","D");
letters的值为 "A,B,C,D"
比较
使用equals方法来比较两个字符串的内容是否相同,这个方法是大小写敏感的,相对应的还有忽略大小写的equalsIgnoreCase方法。
不要使用 == 来比较字符串的内容是否相同,只要字符串在内存中存储位置相同时,使用 == 才会返回true。
我们之前说了字符串是不可变的,共享的,那为什么即使相同内容的字符串还是不能使用 == 来比较呢?事实上只有字符串常量(直接使用双引号获得的字符串对象)是共享的,提取,拼接等操作产生的结果是不共享的。
空串与null
空串""是一个长度为0的字符串,null表示没有任何对象与之关联。二者是有区别的,写代码时要特别注意null,它会引发非常多的运行时异常。
StringBuilder
有些时候我们需要较频繁的字符串拼接,直接使用+操作效率较低,因为每次操作都会生成一个新的字符串对象,时间上和空间上都浪费。可以使用StringBuilder来来避免这个问题。例如:
StringBuilder sb = new StringBuilder();
sb.append(str1);
sb.append(str2);
String s = sb.toString();
StringBuilder的前身是StringBuffer,他们的API是相同的,StringBuilder的效率更高,大部分情况下推荐使用StringBuilder代替StringBuffer,除非是某些需要保证线程安全的情况下。
正文到此结束