String类型
String数据类型属于引用数据类型,而前面讲的整型、浮点型、字符型、布尔型属于基本数据类型
String 类型通过双引号声明””“
Stirng 字符串通过 + 号拼接
如果int,double和String进行加操作,那么int和double会转为String,进行拼接操作
String a = "abc";
int b =100;
double c = 23.0;
a = a + b+c;
//a= "abc10023"
“\n”表示换行, “\t”表示制表符, “”
String 对象
- String常量为匿名对象,但是他无需由用户创建,是由系统自动创建的
- String 类型比较通过equals(),
- ==和equals的区别,==是数值比较,在String类型中为比较对象的内存地址数值,equals是String类提供的字符串内容比较的方法。
直接赋值形式创建字符串对象
String stra = "hello";
String strb = "hello";
String strc = "hello";
System.out.println(stra == strb);//结果true
System.out.println(stra == strc);//结果true
System.out.println(strb == strc);//结果true
共享设计模式,在JVM的底层,存在要给对象池(不一定之保存String对象),当通过直接赋值的形式创建一个String对象时,会将此字符串对象的匿名对象存入对象池,当下次再次通过直接赋值的形式创建字符串对象,同时字符串的内容和对象池中存入的匿名对象的内容一致时,那么将不会重新开辟堆内存空间,而是继续使用对象池中的对象
通过new关键字创建字符串对象
通过new关键字创建的方式,会在堆内存中开辟两块内存空间,其中一块内存空间没有使用,成为垃圾,同时也无法出入对象池,但是可以通过,intern()方法手工入池。
String stra = new String("hello");
String strb = "hello";
System.out.println(stra == strb);//结果false
总结
直接赋值方式,只用于一块堆内存空间,且会保存到对象池,当下次再次创建相同内容的对象时,不会开辟新的堆内存空间。
new方式赋值,会开辟两块堆内存空间,且其中一块时垃圾,同时它不会自动保存到内存池。但是可以通过intern()方法手工入池。
字符串的一些函数
方法 | 类型 | 作用 |
---|---|---|
String(char[] value) | String构造 | 将char数组转化为字符串 |
String(char[] value, int offset, int count) | String构造 | 将char数组安装开始位置和取得长度转化为字符串 |
charAt(int index) | String方法 | 返回对应位置的字符,其中字符串index从0开始 |
toCharArray() |
String方法 | 字符串转化为char数组 |
getBytes() | String方法 | 将字符串转化为byte数组 |
public byte[] getBytes(String charsetName) throws UnsupportedEncodingException | String方法 | 将字符串转化为byte数组,同时进行编码转换 |
String(byte[] bytes, int offset, int length) | String构造 | 将byte数组对应的取值范围转化为字符串 |
public boolean contains(CharSequence s) | String方法 | 判断是否包含指定字符,JDK1.5以后的方法 |
public int indexOf(String str) | String方法 | 返回字符串首先出现的位置,找不到返回-1 |
public int indexOf(String str, int fromIndex) | String方法 | 返回从指定位置开始查找到字符串首先出现的位置,找不到返回-1 |
public int lastIndexOf(String str) | String方法 | 返回字符串最后出现的位置,找不到返回-1 |
public int lastIndexOf(String str, int fromIndex) | String方法 | 返回从指定位置开始查找到字符串最后出现的位置,找不到返回-1 |
public boolean startsWith(String prefix) | String方法 | 判断字符串是不是以给定的字符串开始,返回true表示是,false表示不是 |
public boolean endsWith(String suffix) | String方法 | 判断字符串是不是以给定的字符串结尾,返回true表示是,false表示不是 |
public String replaceAll(String regex, String replacement) | String方法 | 用新的字符串,替换所有老的字符串 |
public String replaceFirst(String regex, String replacement) | String方法 | 用新的字符串,替换第一个出现的老的字符串 |
public String substring(int beginIndex) | String方法 | 截取字符串从给的的索引开始 |
public String substring(int beginIndex, int endIndex) | String方法 | 截取字符串从给的的索引开始,到给的索引结束 |
public String[] split(String regex) | String 方法 | 将字符串,通过给定的字符拆分成字符串数组 |
public String[] split(String regex, int limit) | String 方法 | 将字符串,通过给定的字符拆分成字符串数组,同时 limit可以限制拆分个数,比如设置为2,那么如果可拆分的次数大于2,则只拆分2次,如果小于2,则直接为原来的次数 |
方法 | 类型 | 作用 |
---|---|---|
public boolean isEmpty() | String 方法 | 当字符串长度为0时返回true,其它返回false |
public int length() | String 方法 | 返回字符串长度 |
public String trim() | String 方法 | 去掉字符串两边的空格,中间的不动 |
public String toLowerCase() | String 方法 | 将字符串转为小写,只对字母,其他字符不转 |
public String toUpperCase() | String 方法 | 将字符串转为大写,只对字母,其他字符不转 |
对象比较
对象比较方法一般是一个对象的方法
要注意对null对象的判断
要注意对同意给对象的相等判断