JavaSE基础 (二十二)

字符串相关

String类—->引用类型 java.lang包

常见的String笔试题

==  equals方法和区别
             ==可以比较基本类型 也可以比较引用类型
             比较基本类型只比较值 比较引用类型比较地址
             equals只能比较引用类型(方法)
             默认比较地址this == obj
             如果想要修改比较规则可以重写equals方法
             通常重写equals方法会伴随重写hashcode方法
String的不可变特性
             长度及内容
String与StringBuffer区别
StringBuffer与StringBuilder区别
String对象的存储
             "abc"----->字符串常量池
             new String("abc")--->堆内存

*string中的常用方法

存在哪 java.lang包

没有任何继承关系  实现三个接口Serializable,CharSequence,Comparable

如何构建对象

String str = "abc"; //直接将字符串常量赋值给str (字符串常量池)
String str = new String();//无参函数构造方法创建空的对象
String str = new String("abc");//带参String构造方法创建对象
String str = new String(byte[]);//将数组中的每一个元素转化成对应的char 组合成str
String str = new String(char[]);//将数组中的每一个char元素拼接成最终的String

String的不可变特性

体现在两个地方 长度及内容
长度----->final修饰的数组  数组长度不变 final修饰素组的地址不变
内容----->private修饰的属性 不能再类外访问
在String类中包含一个 数组
private fianl char[] value;//存储String中的每一个字符
fianl最终是不可改变的---->地址不让改变 数组的长度本身不可变
private私有的当前类中---->数组中的内容也不能改变

*4.常用方法

booean = equals(Obj obj);
     //继承自Object类 重写啦 比较两个字符串的字面值是否相等
int = hashCode();
     //继承自object类 重写啦 将当前字符串的每一个char元素拆开 乘以31求和
int = CompareTo(String str);
    //实现Comparable接口 实现啦 按照字典(Unicode编码)索引的顺序比较
String = toString();
    //继承自Object 重写啦 不在输出@hashCode 字符串中的字面值

char = charAt(int index);

返回给定index位置对应的字符
int = codePointAt(int index);
返回给定index位置对应字符的code码

int = length();

返回字符串的长度 (其实就是底层 char[] value属性的长度)
注意:区别数组length是属性 String的length()方法  集合size()方法

.String = concat(String str);

将给定的str拼接在当前String对象的后面
注意:方法执行完毕需要接受返回值 String的不可变特性
      concat方法与 + 拼接性能的问题
      开发中若遇到频繁拼接字符串----->通常使用stringBuilder/stringBuffer

boolean = contains(”s”);

判断给定的s在字符串中是否存在

statsWith(String prefix);
   endWith(String suffix);

判断此字符串是否已XX开头/结尾

byte[] = getBytes();—->getBytes(String charsetName); char[] = toCharArray[];

将当前字符串转化为数组 “我爱你中国”“我”“爱”“你”“中”“国”

int index = indexOf(int/String str,[int fromindex]);

四个方法重载,找寻给定元素在字符串第一次出现的索引位置 若不存在返回-1
lastIndexOf(int/String str,[int fromindex]);
找寻给定元素在字符串最后一次出现的索引位置 若不存在返回-1

boolean = isEmpty();

判断当前字符串是否为空字符串(length是否为0)
注意与null之间的区别

replace(); replaceAll(); replaceFirst();

将给定字符串替换成另一个字符串

String[] = split(String regex, [int limit限度界限]);

按照正则表达式将原来的字符串拆开
   String str="a-b-c-d";
   String[] value = str.split("-",3);
   for(String v:value){
     System.out.println(v);
   }  

String = substring(int beginIndex),[int endIndex]);

将当前字符串截取一部分
从beginIndex开始至endIndex结束[beginIndex,endIndex)
若endIndex不写 则默认到字符串最后

String = toUpperCase();
String = toLowerCase();

将全部字母转换成大写/小写

String = trim();

去掉字符串前后多余的空格