本文主要介绍equals和==的区别,以及堆内存、栈内存、方法区之间如何进行地址指向,String类中包含的方法。
String类:
String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。String类是Object类的子类,
构造方法:
A:public String()空构造
B:publicString(byte[] bytes) //把字节数组转换成字符串(字节值得范围:-128~127)
C:publicString(byte[] bytes,int offset,int length) //把字节数组的一部分转换成字符串,int offset指数组的索引,int length指需要的长度个数。
其他不同类型的数组类比上例
特点:
A:字符串一旦被赋值,就不能改变。
注意:这里指的是字符串的内容不能改变,而不是引用不能改变。
B:字面值作为字符串对象和通过构造方法创建对象的不同
Strings = new String("hello");和String s ="hello"的区别?
前者会在堆内存和方法区分别创建对象,后者只在方法区创建一个对象
C:equal和==
==:基本类型比较的是值是否相同;比较引用类型比较的是地址值是否相同
equals :比较引用类型默认也是比较地址值是否相同,而String类重写了equals()方法,比较的是内容是否相同
字符串的功能
A:判断功能
boolean equals(Object obj) 比较字符串内容是否相同,区分大小写boolean equalsIgnoreCase(String str) 比较字符串内容是否相同,不区分大小写
boolean contains(String str) 判断大字符串中是否包含小字符串
boolean startsWith(String str) 是否以某个指定字符串开头
boolean endsWith(String str) 是否以某个指定字符串结尾
boolean isEmpty() 是否为空
字符串内容为空:String s=""
字符串对象为空:String s=null 空指针异常
B:获取功能
int length() 获取字符串长度char charAt(int index) 获取指定索引位置的字符
int indexOf(int ch) 返回指定字符在此字符串中第一次出现处的索引
注意:这里为什么用int类型,而不是char类型?原因是‘a’和97其实都可以代表‘a’,避免强制转换。
int indexOf(String str) 返回指定字符串在此字符窜中第一次出现处的索引
int indexOf(int ch,int fromIndex) 返回指定字符在此字符串中从指定位置后第一次出现处的索引
int indexOf(String str,int fromIndex) 返回指定字符串在此字符串中从指定位置后第一次出现处的索引
String substring(int start) 从指定位置开始截取字符串,默认到末尾,包含start
String substring(int start,int end) 从指定位置开始到指定位置结束截取字符串
C:转换功能
byte[] getBytes() 把字符串转换成字节数组char[] toCharArray() 把字符串转换成字符数组
static String valueOf(char[] chs) 把字符串数组转换成字符串
static String valueOf(int i) 把int类型的数组转换成字符串
注意:String类的valueof方法可以把任意类型的数据转换成字符串
String toLowerCase() 把字符串转换成小写
String toUpperCase() 把字符串转换成大写
String concat(String str) 把字符串拼接
D:其他功能
a:替换功能
Stringreplace(char old,char new)
Stringreplace(String old,String new)
b:去空格功能
Stringtrim() 去除字符串两端空格
c:按字典比较功能(字典指A-Z的顺序结果可能为正,也可能为负)
intcompareTo(String str)
intcompareToIgnoreCase(String str)