【Java】认识String类

本文围绕Java字符串展开,介绍了常见的字符串构造方式,强调比较字符串内容需用equals方法,而非“==”。还阐述了字符串与字符数组、字节数组的相互转换,以及获取字符串长度和连接字符串的方法,可参考官方API文档获取更多信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 创建字符串

常见的构造 String 的方式

// 方式一
String str = "Hello Bit";
// 方式二
String str2 = new String("Hello Bit");
// 方式三
char[] array = {'a', 'b', 'c'};
String str3 = new String(array);

官方文档 https://docs.oracle.com/javase/8/docs/api/index.html

2. 字符串比较相等

如果现在有两个int型变量,判断其相等可以使用 == 完成。

str1 = "world";
System.out.println(str2);
// 执行结果
Hello
int x = 10 ;
int y = 10 ;
System.out.println(x == y); 
// 执行结果
true

如果说现在在String类对象上使用 == 会怎么样?

代码1:

String str1 = "Hello";
String str2 = "Hello"; 
System.out.println(str1 == str2); 
// 执行结果
true

貌似看起来没啥问题, 再换个代码试试, 发现情况不太妙。

代码2:

String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str1 == str2);
// 执行结果
false

分析:代码1的创建方式是String直接创建,创建出来的字符串“Hello”会存储在常量池中,str1 和 str2 是指向同一个对象的. 此时如 “Hello” 这样的字符串常量是在字符串常量池中。

关于字符串常量池
如 “Hello” 这样的字符串字面值常量, 也是需要一定的内存空间来存储的.,这样的常量具有一个特点, 就是不需要修改, 所以如果代码中有多个地方引用都需要使用 “Hello” 的话, 就直接引用到常量池的这个位置就行了, 而没必要把 “Hello” 在内存中存储两次。

代码2则是通过 String str1 = new String(“Hello”); 这样的方式创建的 String 对象相当于再堆上另外开辟了空间来存储"Hello" 的内容, 也就是内存中存在两份 “Hello”。此时再使用“==”来比较就错误了。

Java 中要想比较字符串的内容, 必须采用String类提供的equals方法

String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str1.equals(str2));
// System.out.println(str2.equals(str1)); // 或者这样写也行
// 执行结果
true

equals 使用注意事项

现在需要比较 str 和 “Hello” 两个字符串是否相等, 我们该如何来写呢?

String str = new String("Hello");

// 方式一
System.out.println(str.equals("Hello"));
// 方式二
System.out.println("Hello".equals(str));

推荐使用方式二,一旦str=null 方式一会报空指针异常
String str = null;
// 方式一
System.out.println(str.equals("Hello"));  // 执行结果抛出 java.lang.NullPointerException异常
// 方式二
System.out.println("Hello".equals(str); //执行结果false

3. 字符, 字节与字符串

3.1 字符与字符串
字符串内部包含一个字符数组,String 可以和 char[] 相互转换。

String str = "hello" ; 
System.out.println(str.charAt(0)); // 下标从 0 开始

// 执行结果
h 
System.out.println(str.charAt(10)); 
// 执行结果
产生 StringIndexOutOfBoundsException 异常

代码示例: 字符串与字符数组的转换

String str = "helloworld" ; 
// 将字符串变为字符数组
char[] data = str.toCharArray() ; 
for (int i = 0; i < data.length; i++) { 
 System.out.print(data[i]+" "); 
} 
// 字符数组转为字符串
System.out.println(new String(data)); // 全部转换
System.out.println(new String(data,5,5)); // 部分转换

3.2 字节与字符串

代码示例: 实现字符串与字节数组的转换处理

String str = "helloworld" ; 
// String 转 byte[] 
byte[] data = str.getBytes() ; 
for (int i = 0; i < data.length; i++) { 
 System.out.print(data[i]+" "); 
} 
// byte[] 转 String 
System.out.println(new String(data)); 

4.字符串长度

用于获取有关对象的信息的方法称为访问器方法。
String 类的一个访问器方法是 length() 方法,它返回字符串对象包含的字符数。
下面的代码执行后,len 变量等于5:

public class StringDemo {
    public static void main(String args[]) {
        String site = "Hello";
        int len = site.length();
        System.out.println(len);
   }
}
//运行结果
5

5.连接字符串

String 类提供了连接两个字符串的方法:

str1.concat(str2);

返回 string2 连接 string1 的新字符串。也可以对字符串常量使用 concat() 方法,如:

"我爱".concat("中国!");

更常用的是使用’+'操作符来连接字符串,如:

"我爱" + "中国" + "!"

下面是 String 类支持的方法,更多详细,请查看官方API文档https://www.runoob.com/manual/jdk1.6/java/lang/String.html
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值