字符串可以初始化为String str=””;此时的字符串不为null,长度为0。
常用方法:
1.判断
equals(Object str)---比较大小,比较的是两个字符串的值是否相等
如果使用的是==进行字符串比较,比较的是两个new出来的字符串比较的是地址值,如果是String s1=”11”;String s2=”11”,比较的是值,因为当s1创建出来,当定义s2时会引用s1中的值。S1为New出来的放在堆中,当s2定义之后因为不是new出来的,所以直接引用s1new出来的对象。所以地址是一样的。
Startwith(String str)---判断字符串是否以指定的str开头
endwith(String str)---判断字符串是否以指定的str结尾
2.获取
length()---获取长度
charAt(int index)--获取指定索引的字符
Indexof(String str)--获取指定字符串第一次出现索引的位置
Stringsubstring(int start):从start开始截取字符串到字符串结尾
Stringsubstring(int start,int end):从start开始截取字符串到字符串结尾,包括start,不包括end
3.转换
Char[]toCharArray():把字符串转换为字符数组
StringtoLowerCase();把字符串转换为小写字符串
StringtoUpperCase();把字符串转换为大写字符串
Stringtrim();取出字符串两端的空格
String[] String split(String str);按str切割字符串
String的构造方法中可以传入string和int[],byte[],char[]
String中hashcode():
public int hashCode() {
int h = hash;
if (h == 0 && value.length > 0) {
char val[] = value;
for (int i = 0; i < value.length; i++) {
h = 31 * h + val[i];
}
hash = h;
}
return h;
}
在javabean中重写hashcode方法:
根据类定义的变量,重写hashcode方法,要先定义两个初始化变量,一个是prime是31,result为1.
表达式1为:result=prime*result+变量(此变量为int类型)
表达式2为:result=prime*result+((变量==null)?0:变量.hashcode())(此变量为int类型)
String和StringBuffer的区别
String定义的字符串长度不能再改变,StringBuffer长度可变,因为StringBuffer类中提供的append方法。String定义的字符串在堆字符串进行拼接时使用的是+=。
示例代码:(string拼接字符串)
String tempstr = "abcdefghijklmnopqrstuvwxyz";
int times = 5000;
long lstart1 = System.currentTimeMillis();
String str = "";
for (int i = 0; i < times; i++) {
str += tempstr;
}
long lend1 = System.currentTimeMillis();
long time = (lend1 - lstart1);
System.out.println(time);
得到结果的运行的时间大概是七百多
示例代码:(StringBuffer拼接字符串)
String tempstr = "abcdefghijklmnopqrstuvwxyz";
int times = 5000;
long lstart1 = System.currentTimeMillis();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < times; i++) {
sb.append(tempstr);
}
long lend1 = System.currentTimeMillis();
long time = (lend1 - lstart1);
System.out.println(time);
得到结果的运行时间大概是1或者2。
由此可见,stringbuffer的速度远远要比string的速度快很多。那是为什么string的拼接速度这么慢呢。
因为当执行str+=“hello”的处理步骤实际上是通过建立一个StringBuffer,然后调用append(),最后再将StringBuffer toString();
所以str+=“hello”可以等同于
StringBuffer sb = new StringBuffer(str);
sb.append("hello")
str=sb.toString();
所以,其实上面的string拼接字符串的代码就等同于如下代码
String tempstr = "abcdefghijklmnopqrstuvwxyz";
int times = 5000;
long lstart2 = System.currentTimeMillis();
String str = "";
for (int i = 0; i < times; i++) {
StringBuffer sb = new StringBuffer(str);
sb.append(tempstr);
str = sb.toString();
}
long lend2 = System.currentTimeMillis();
long time2 = (lend2 - lstart2);
System.out.println(time2);
所以在程序中如果对字符串频繁的修改的话,使用StringBuffer性能会更高