String

字符串

字符串是常量;它们的值在创建之后不能更改。因为 String 对象是不可变的,所以可以共享。

字符串的特点

1、字符串String类型本身是final声明的,意味着我们不能继承String。

2、字符串的对象也是不可变对象,意味着一旦进行修改,就会产生新对象

我们修改了字符串后,如果想要获得新的内容,必须重新接受。

如果程序中涉及到大量的字符串的修改操作,那么此时的时空消耗比较高。可能需要考虑使用StringBuilder或StringBuffer的可变字符序列。

3、String对象内部是用字符数组进行保存的

> JDK1.9之前有一个char[] value数组,JDK1.9之后byte[]数组
"abc"` 等效于 `char[] data={ 'a' , 'b' , 'c' }`。

4、String类中这个char[] values数组也是final修饰的,意味着这个数组不可变

5、就因为字符串对象设计为不可变,那么所以字符串有常量池来保存很多常量对象

 

6、任意数据类型与"字符串"进行拼接,结果都是字符串

7、字符串的对象个数

String str1 = "hello";//1个,在常量池中
String str3 = new String("hello");
//str3首先指向堆中的一个字符串对象,然后堆中字符串的value数组指向常量池中常量对象的value数组

字符串对象比较

1、==:比较是对象的地址

只有两个字符串变量都是指向字符串的常量对象时,才会返回true

2、equals:比较是对象的内容,因为String类型重写equals,区分大小写

3、equalsIgnoreCase:比较的是对象的内容,不区分大小写 

4、compareTo:String类型重写了Comparable接口的抽象方法,自然排序,按照字符的Unicode编码值进行比较大小的,严格区分大小写  

5、如何判断某个字符串是否是空字符串

if("".equals(str))

if(str!=null  && str.isEmpty())

if(str!=null && str.equals(""))

if(str!=null && str.length()==0)

注释(indexof方法内源码涉及)ch < Character.MIN_SUPPLEMENTARY_CODE_POINT

以0x开头代表十六进制,0开头的是八进制。
Character. MIN_SUPPLEMENTARY_CODE_POINT这个数代表十进制中62355,刚好是2个字节。

  

  

 

 

 

 

 

 

本文为原创文章,转载请标明出处
原文地址:https://www.cnblogs.com/harden13/p/14583686.html