字符串广泛应用 在 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
它的原理在这里就不做详细讲解了,以后在进阶学习的时候再做讲解。
String的相关方法
这里的相关参数和返回值就不做过多阐述了,详细的可以去阅读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));
}
}
输出结果为:
S
t
r
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"));
}
}
输出结果为:
true
false
true
等等等等一系列操作字符串的方法,这里就不做过多的赘述了。