Java字符串
(顺序按照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
空串与null串
- 空串是一个长度为 0 且占内存的空字符串(是一个对象),在内存中分配一个空间,可以使用 Object 对象中的方法。
- null 是空引用,表示一个对象的值,没有分配内存。(表示目前没有任何一个对象与这个变量相关联)
- new String() 创建一个字符串对象的默认值为 “”,String 类型成员变量的初始值为 null。