(顺序按照Java核心技术)
Java的api中文文档,String的更多相关方法Java 8 中文版 - 在线API中文手册 - 码工具 (matools.com)
Java字符串从概念讲就是Unicode字符串。Java没有内置的字符串类型,而是提供一个预定义类:String,每一个用双引号括起来的就是String。
Java的字符串和c语言中的不同。c语言中的字符串是一个字符数组,数组名是一个指针常量。Java字符串类似于char*指针,当修改一个字符串a的时候,系统重新申请一个空间temp,给temp赋好值后,将之前的a指针指向temp。
从前的内存块不适用后,会由系统进行回收。
Java中字符串代码单元与代码点从0开始计数。
String类的substring方法可以从一个较大的字符串中提取出一个字串。
String a = "hello"; String ans = a.substring(0,3); //0开始,包括0不包括3
使用“+”号直接拼接两个字符串。此方法单词之间没有空格,前后次序按照给定的来(a+b)。
当一个字符串与非字符串进行拼接,后者被直接转化成字符串。(任何一个Java对象都可以转化成为字符串)。
使用静态方法join
String ans = String.join("*","H","E","L","L","O"); //使用*作为分割符。ans=H*E*L*L*O
使用repeat方法。
String ans = "HELLO".repeat(3); //ans = HELLOHELLOHELLO
方法:原始字符串a(假定值是“HEELO”),提取a中想要保留的部分,再与其他部分进行拼接。
一个已经创建好的字符串内容“HELLO”永远不会改变,但可以修改字符串变量a。(让一个装苹果的盒子改装李子,但是不会去修改苹果本身)
具体的工作方式:字符串共享。
字符串共享只有字符串字面量共享,+号与substring等操作得到的字符串不会共享。
多个字符串放在同一个公共的存储池,字符串变量指向存储池相应的位置。
复制是将一个字符串变量指向一个已经存在的字符串。
使用equals方法
如果想要忽略大小写,使用equalsIgnoreCase方法。
也可以用compareTo方法
a.equals(b); a.equals("hello"); a.equalsIgnoreCase("Hello"); a.compareTo("hello");
关于为什么不能使用“==”
因为Java内部的字符串共享原则,而且Java中字符串本质是个指针,所以==只能比较两个字符串存储的位置是否一样。
当比较字符串与一个存储位置不同的副本的时候,会返回false。
**字符串共享只有字符串字面量共享,+号与substring等操作得到的字符串不会共享。**所以比较字符串的一部分是否相同的时候,可能会返回false