String不是基本数据类型,是Java封装字符串的一个类。也是一个引用数据类型。
String str4 = "hello";这种方式赋值的原理是先在内存中通过equals寻找 "hello" 这个值,如果找到了,那么str1 就直接引用,如果没找到那么就从新建一个对象。
这里的 寻找的内存 并不是所谓的堆中,而是JVM内部维护的String pool ,也是class中的常量池(这里不深入解释常量池)。所以用 = 赋值的对象是存储在
常量池中的,所以 == 的时候他们内存地址是不同的。这里Str4创建的时候引用了str1创建在常量池中的的"hello",而str2是在堆内存中创建的。所以输出false
String常用方法
boolean | contains (CharSequence s) 判断此字符串是否包含指定字符串
String | concat (String str) 将指定字符串添加到此字符串结尾
boolean | endsWith(String suffix) 判断此字符串是否以指定字符串结尾
boolean | startWith(String suffix) 判断次字符串是否以指定字符串开始
int | indexOf(int ch|String str , [int fromIndex]) 查找指定字符或字符串第一次出现的索引(即坐标),fromIndex可声明从指定索引开始查找
String | trim() 去除首尾空格
String | subString(int beginIndex , [int endIndex]) 以索引范围截取字符串
String | replace(char oldChar , char newChar) 字符串替换
String | toUpperCase() 转大写
String | toLowerCase() 转小写
boolean | equalseIgnoreCase(String anotherString) 不区分大小写比较
String[]| split(String regex) 字符串分割
//String 声明方式有两种:
String str1 = "hello";
String str2 = new String("hello");
//我们观察一段代码:
String str1 = "hello";
String str2 = new String("hello");
String str3 = "hel"+"lo";
String str4 = "hello";
System.out.println(str1==str2); //false
System.out.println(str2==str3); //false
System.out.println(str3==str4); //true
System.out.println(str3==str1); //true
System.out.println(str4==str1); //true
System.out.println(str4==str2); //false
最开始我一直没搞懂 "str4==str2" 为什么是 false ,然后看了一些大神的博客得出了一些总结:
String str4 = "hello";这种方式赋值的原理是先在内存中通过equals寻找 "hello" 这个值,如果找到了,那么str1 就直接引用,如果没找到那么就从新建一个对象。
这里的 寻找的内存 并不是所谓的堆中,而是JVM内部维护的String pool ,也是class中的常量池(这里不深入解释常量池)。所以用 = 赋值的对象是存储在
常量池中的,所以 == 的时候他们内存地址是不同的。这里Str4创建的时候引用了str1创建在常量池中的的"hello",而str2是在堆内存中创建的。所以输出false
String常用方法
boolean | contains (CharSequence s) 判断此字符串是否包含指定字符串
String | concat (String str) 将指定字符串添加到此字符串结尾
boolean | endsWith(String suffix) 判断此字符串是否以指定字符串结尾
boolean | startWith(String suffix) 判断次字符串是否以指定字符串开始
int | indexOf(int ch|String str , [int fromIndex]) 查找指定字符或字符串第一次出现的索引(即坐标),fromIndex可声明从指定索引开始查找
String | trim() 去除首尾空格
String | subString(int beginIndex , [int endIndex]) 以索引范围截取字符串
String | replace(char oldChar , char newChar) 字符串替换
String | toUpperCase() 转大写
String | toLowerCase() 转小写
boolean | equalseIgnoreCase(String anotherString) 不区分大小写比较
String[]| split(String regex) 字符串分割