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[]

toCharArray()

 

字节与字符串:

byte[]

getBytes()

byte[]

getBytes(Charset charset)

byte[]

getBytes(String charsetName)

 

字符串比较:

int

compareTo(String anotherString)

比较字符串的大小(-1、0、1)

int

compareToIgnoreCase(String str)

忽略大小写比较字符串大小

boolean

equals(Object anObject)

boolean

equalsIgnoreCase(String anotherString)

 

字符串查找:

boolean

contains(CharSequence s)

是否包含

boolean

endsWith(String suffix)

int

indexOf(String str)

返回找到的 str 的首字母索引值

int

indexOf(String str, int fromIndex)

从指定位置查找

int

lastIndexOf(String str)

倒着查找

int

lastIndexOf(String str, int fromIndex)

boolean

matches(String regex)

使用正则表达式匹配

boolean

startsWith(String prefix)

boolean

startsWith(String prefix, int toffset)

 

字符串替换:

String

replace(char oldChar, char newChar)

String

replaceAll(String regex, String replacement)

String

replaceFirst(String regex, String replacement)

 

字符串拆分:

String[]

split(String regex)

String[]

split(String regex, int limit)

限制拆分后的个数

 

字符串截取:

String

substring(int beginIndex)

String

substring(int beginIndex, int endIndex)

 

其他常用方法

char

charAt(int index)

返回指定索引位置的字符

String

concat(String str)

连接两个字符串类似 “+”

boolean

isEmpty()

String

intern()

int

length()

String

toLowerCase()

转换为小写

String

toUpperCase()

转换为大写

String

trim()

去除开头结尾的空格(注意只有这一种方法:1.8)

 PS:上面的方法是直接从 Java 1.8 API 文档中提取出来的,这里主要作为一个个人总结,由于较为简单所以没有符详细代码。