Java基础——String字符串



字符串可以初始化为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性能会更高

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值