String类型详解
String本身就是一个类,只是Java对其进行了特殊处理。
两种实例化方式原理及区别:
/* 两种创建 String 对象的方法
* 1. 直接赋值:(推荐按这种方法)
* 2. 使用构造方法
* */String str1 = "123";
String str2 = new String("123");
/*两者的区别
* 1. 直接赋值: 只会开辟一块堆内存空间,并且该对象会保存在对象池中,以供下次使用
* 2. 使用构造方法: 会开辟两块堆内存空间,并且一块将会成为垃圾,并且不会自动保存到对象池中,但可以通过 str1.intern() 方法手工入池
* */// 两种创建 string 对象的区别
String str3 = "123"; // 与 str1 共享 "123" 数据所占的堆内存空间
System.out.println(str1 == str3); // 值为: true; JVM的常量共享
// 字符串的比较
System.out.println(str1 == str2); // 结果为 false
System.out.println(str1.equals(str2)); // 结果为 true
/*
* 原因分析:
* "==" 只能进行数值的比较,str1 == str2 实际比较的是两个字符串内存地址的数值
* "equals()" 比较的才是两者的内容的区别
* */
/*
* 在以后的开发中强烈建议采用 way_2 比较字符串.
* 原因在于:
* way_1 中 str1 如果为空的话会产生空指针异常,导致程序终止
* way_2 中 str1 即使为空,只会得到的结果为 false,不会出现异常
* */// way_1
str1.equals("hello");
// way_2
"hello".equals(str1);
常用操作分类:
构造函数:
String(byte[] bytes)
String(byte[] bytes, Charset charset)
String(byte[] bytes, String charsetName)
String(byte[] bytes, int offset, int length)
String(char[] value)
String(char[] value, int offset, int count)
String(StringBuffer buffer)
String(StringBuilder builder)
字符串与字符数组:
char[] |
字节与字符串:
byte[] | getBytes() |
byte[] | |
byte[] |
字符串比较:
int | compareTo(String anotherString) 比较字符串的大小(-1、0、1) |
int | compareToIgnoreCase(String str) 忽略大小写比较字符串大小 |
boolean | |
boolean | equalsIgnoreCase(String anotherString) |
字符串查找:
boolean | 是否包含 |
boolean | |
int | 返回找到的 str 的首字母索引值 |
int | indexOf(String str, int fromIndex) 从指定位置查找 |
int | lastIndexOf(String str) 倒着查找 |
int | lastIndexOf(String str, int fromIndex) |
boolean | 使用正则表达式匹配 |
boolean | startsWith(String prefix) |
boolean | startsWith(String prefix, int toffset) |
字符串替换:
replace(char oldChar, char newChar) | |
replaceAll(String regex, String replacement) | |
replaceFirst(String regex, String replacement) |
字符串拆分:
String[] | |
String[] | split(String regex, int limit) 限制拆分后的个数 |
字符串截取:
substring(int beginIndex) | |
substring(int beginIndex, int endIndex) |
其他常用方法
char | charAt(int index) 返回指定索引位置的字符 |
连接两个字符串类似 “+” | |
boolean | isEmpty() |
intern() | |
int | length() |
转换为小写 | |
转换为大写 | |
trim() 去除开头结尾的空格(注意只有这一种方法:1.8) |
PS:上面的方法是直接从 Java 1.8 API 文档中提取出来的,这里主要作为一个个人总结,由于较为简单所以没有符详细代码。