本人已参与「新人创作礼」活动,一起开启掘金创作之路。
持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第31天,点击查看活动详情
目录
今天阿文介绍的内容:
- Java中的String类
- String类的各种函数
Java String类
字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。String表示字符串类型,属于引用数据类型,不属于基本数据类型。
1.创建字符串
创建字符串最简单的方式如下:
语法格式:
String str = "zhangsan";
在代码中遇到字符串常量时,这里的值是 "zhangsan",编译器会使用该值创建一个 String 对象。和其它对象一样,可以使用关键字new和构造方法来创建 String 对象。
构造方法创建:
String str2 = new String("zhangsan");
在JDK当中String类型的字符串,例如"abc","dfs"都是直接存储在“方法区”的“字符串常量池”当中的。
这是因为字符串在实际开发中使用太频繁。为了执行效率,所以把字符串放到了方法区的字符串常量池当中。
例子1:
public class StringTest01 {
public static void main(String[] args) {
// 这两行代码表示底层在字符串常量池中创建了3个字符串对象,分别为:abcdef、xy、abcdefxy
String s1 = "abcdef";
String s2 = "abcdef" + "xy";
// 分析:这是使用new的方式创建的字符串对象。这个代码中的"xy"是从哪里来的?
// 凡是双引号括起来的都在字符串常量池中有一份。
// new对象的时候一定在堆内存当中开辟空间。
String s3 = new String("xy");
}
}
底层分布图:
例子2:
public class StringTest02 {
public static void main(String[] args) {
String s1 = "hello";
// "hello"是存储在方法区的字符串常量池当中
// 所以这个"hello"不会新建。(因为这个对象已经存在了!)
String s2 = "hello";
// == 双等号比较的是变量中保存的内存地址
System.out.println(s1 == s2); // true
String x = new String("xyz");
String y = new String("xyz");
// == 双等号比较的是变量中保存的内存地址
System.out.println(x == y); //false
}
}
底层分布图:
注意: 字符串对象之间的比较不能使用“== ”,"=="不保险。应该调用String类的
equals方法
例子3:
String k = new String("testString");
//String k = null;
// "testString"这个字符串可以使用"."引用字符串方法呢?
// 因为"testString"是一个String字符串对象。只要是对象都能调用方法。
System.out.println("testString".equals(k)); // 建议使用这种方式,因为这个可以避免空指针异常。
System.out.println(k.equals("testString")); // 存在空指针异常的风险。不建议这样写。
2.构造方法
| 构造方法名 | 例子 |
|---|---|
| String s = "xyz" | 最常用 |
| String(String original) | String("xyz") |
| String(char数组) | String(charArray) |
| String(char数组, 起始下标, 长度) | String(charArray, m, n) |
| String(byte数组) | String(byteArray) |
| String(byte数组,起始下标,长度) | String(byteArray, n, m) |
| String(StringBuffer buffer) | String(buffer) |
| String(StringBuilder builder) | String(builder) |
例子:
class StringTest{
public static void main(String[] args) {
//最常用的方式
String s1 = "我叫张三";
System.out.println(s1);//我叫张三
String s2 = new String("我叫张三");
System.out.println(s2);//我叫张三
char[] c = {'我' , '叫', '张', '三'};
String s3 = new String(c);
System.out.println(s3);//我叫张三
String s4 = new String(c, 2, 2);
System.out.println(s4);//张三
byte[] b = {65, 66 ,67, 68};
String s5 = new String(b);
System.out.println(s5);//ABCD
String s6 = new String(b, 1, 2);
System.out.println(s6);//BC
StringBuffer sb1 = new StringBuffer("我是广东人");
String s7 = new String(sb1);
System.out.println(s7);//我是广东人
StringBuilder sb2 = new StringBuilder("我是广州人");
String s8 = new String(sb2);
System.out.println(s8);//我是广州人
}
}
可以看到,将字符数组作为构造函数的参数时,Java换将字符数组中的字符相连,然后赋值给字符串,byte类型数组则是将byte类型的值对应ASCII转换为字符,然后相连。StringBuilder和StringBuffer是可变字符串。
3.字符串长度
用于获取有关对象的信息的方法称为访问器方法。
String 类的一个访问器方法是 length() 方法,它返回字符串对象包含的字符数。
例子:
class StringTest{
public static void main(String args[]) {
String site = "www.baidu.com";
int len = site.length();
System.out.println( "百度网址长度 : " + len );//len = 13
}
}
4.连接字符串
String 类提供了连接两个字符串的方法:
string1.concat(string2);
返回 string2 连接 string1 的新字符串。也可以对字符串常量使用 concat() 方法,如:
"我叫".concat("张三");
更常用的是使用'+'操作符来连接字符串,如:
string1 + string2;
"我叫" + "张三";
例子:
public class StringTest {
public static void main(String args[]) {
String string1 = "百度网址:";
System.out.println("1、" + string1 + "www.baidu.com");
//输出:1、百度网站:www.baidu.com
}
}
5.创建格式化字符串
在Java中,String类提供了一个静态方法format(),String 类使用静态方法 format() 返回一个String 对象而不是 PrintStream 对象。String 类的静态方法 format() 能用来创建可复用的格式化字符串。
例子:
String fs;
fs = String.format("浮点型变量的值为" +
"%f, 整型变量的值为 " +
" %d, 字符串变量的值为 " +
" %s", floatVar, intVar, stringVar);
总结
- String类型是
引用类型,字符串常量存放在字符串常量池中 - String类型提供了大量的构造函数
- String类型可以使用concat()和“+”对字符串进行连接
- String类型通过format()进行字符串格式化
好了,今天阿文就介绍到这了...
byebye...