字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。
可以使用最简单的方式创建字符串,创建方式如下:
String str = "string";
可以使用构造函数来创建,创建方式如下:
String str = new String("string");
不同的创建当时性质不一样,这里在下面做一下列举:
public class StringTest { public static void main(String[] args) { String str1 = "string"; String str2 = "string"; System.out.println(str1 == str2);//true }}
为什么运行结果是true呢,这是因为String创建的字符串会在字符串常量池中,相同的字符串会指向同一块区域,所以是true,无论再多的创建都是指向同一片内存区域,示例如下:
package test;/** * 全都给我写代码 * * @author jiangminghui * @date 2022/11/17 17:08 **/public class StringTest { public static void main(String[] args) { String str1 = "string"; String str2 = "string"; String str3 = "string"; String str4 = "string"; String str5 = "string"; String str6= "string"; System.out.println(str1 == str2);//true System.out.println(str1 == str2);//true System.out.println(str1 == str3);//true System.out.println(str1 == str4);//true System.out.println(str1 == str5);//true System.out.println(str1 == str6);//true }}
但是通过构造函数创建的方式,创建出来的对象是存放在堆中的,都是每一个对象分配内存区域的,示例如下:
package test;/** * 全都给我写代码 * * @author jiangminghui * @date 2022/11/17 17:08 **/public class StringTest { public static void main(String[] args) { String str1 = new String("String"); String str2 = new String("String"); System.out.println(str1 == str2);//true }}
无论创建多少内容相同的字符串都是会另外开辟内存空间的,示例如下:
package test;/** * 全都给我写代码 * * @author jiangminghui * @date 2022/11/17 17:08 **/public class StringTest { public static void main(String[] args) { String str1 = new String("String"); String str2 = new String("String"); String str3 = new String("String"); String str4 = new String("String"); String str5 = new String("String"); String str6 = new String("String"); System.out.println(str1 == str2);//true System.out.println(str1 == str2);//true System.out.println(str1 == str3);//true System.out.println(str1 == str4);//true System.out.println(str1 == str5);//true System.out.println(str1 == str6);//true }}
示意图如下:
String中有很多的构造函数,用于不同参数初始化我们的字符串:
以字符数组为例,示例如下:
public class StringDemo{ public static void main(String args[]){ char[] helloArray = { 'r', 'u', 'n', 'o', 'o', 'b'}; String helloString = new String(helloArray); System.out.println( helloString ); }}
用于获取有关对象的信息的方法称为访问器方法。
String 类的一个访问器方法是 length() 方法,它返回字符串对象包含的字符数。
下面的代码执行后,len 变量等于 6:
package test;/** * 全都给我写代码 * * @author jiangminghui * @date 2022/11/17 17:08 **/public class StringTest { public static void main(String[] args) { String str1 = new String("String"); System.out.println(str1.length()); }}
String中有两种方式可以链接字符串,第一种是使用concat来连接字符串,示例如下:
package test;/** * 全都给我写代码 * * @author jiangminghui * @date 2022/11/17 17:08 **/public class StringTest { public static void main(String[] args) { String str1 = new String("String1"); String str2 = new String("String2"); System.out.println(str1.concat(str2)); }}
输出结果为:
String1String2
concat方法源码:
public String concat(String str) { if (str.isEmpty()) { return this; } return StringConcatHelper.simpleConcat(this, str);}
它的返回值是String类型,返回的是链接后的字符串。
第二种方式是重载的操作符+,示例如下:
package test;/** * 全都给我写代码 * * @author jiangminghui * @date 2022/11/17 17:08 **/public class StringTest { public static void main(String[] args) { String str1 = new String("String1"); String str2 = new String("String2"); System.out.println(str1+str2); }}
输出结果为:
String1String2
它的原理在这里就不做详细讲解了,以后在进阶学习的时候再做讲解。
这里的相关参数和返回值就不做过多阐述了,详细的可以去阅读jdk提供的api操作文档
charAt(int index):返回指定索引位置的字符,index为索引值
package test;/** * 全都给我写代码 * * @author jiangminghui * @date 2022/11/17 17:08 **/public class StringTest { public static void main(String[] args) { String str1 = new String("String1"); System.out.println(str1.charAt(0)); System.out.println(str1.charAt(1)); System.out.println(str1.charAt(2)); }}
输出结果为:
Str
int hashCode():返回该字符串的哈希值
package test;/** * 全都给我写代码 * * @author jiangminghui * @date 2022/11/17 17:08 **/public class StringTest { public static void main(String[] args) { String str1 = new String("String1"); System.out.println(str1.hashCode()); }}
输出结果为:
-217105888
int length():返回字符串的长度:
package test;/** * 全都给我写代码 * * @author jiangminghui * @date 2022/11/17 17:08 **/public class StringTest { public static void main(String[] args) { String str1 = new String("String1"); System.out.println(str1.length()); }}
输出结果为:
7
boolean contains(String str):是否包含当前字符串
package test;/** * 全都给我写代码 * * @author jiangminghui * @date 2022/11/17 17:08 **/public class StringTest { public static void main(String[] args) { String str1 = new String("String1"); System.out.println(str1.contains("1")); System.out.println(str1.contains("s")); System.out.println(str1.contains("S")); }}
输出结果为:
truefalsetrue
等等等等一系列操作字符串的方法,这里就不做过多的赘述了。