Java基础---String复习

一、创建方式:

1、String str = "abc";

2、char[] value = {'a','b','c'}; String str = new String(value);

package cn.tedu;
/**本类用于复习String*/
public class ReviewString {
    public static void main(String[] args) {
        /**
         * string创建对象的两种方式
         * 直接创建/通过对象创建
         */
        String s1 = "abc";

        char[] value = {'a','b','c'};
        String s2 = new String(value);

        String s3 = "abc";

        
        System.out.println(s1 == s2);//false
        System.out.println(s1.equals(s2));//true,String重写了equals()。
        System.out.println(s1 == s3);//true,s1已经创建过一次,值(abc)存在于常量池中。


        System.out.println(s2.hashCode());//96354
        System.out.println(s2);//abc
    }
}

二、字符串常量池

字符串常量池位于堆内存中,专门用来存放字符串常量,可以提高内存的使用率,避免开辟多余的内存空间存放相同的字符串,如果该字符串已经存在于常量池中,则返回他的引用,如果不在,则实例化一个字符串放在常量池中,并返回他的引用。

三、String API总结---hashCode()&toString()&equals()...

方法有很多,重点看这三个

String重写了这三个方法;

1、hashCode():

(1)默认实现方式:返回根据对象的地址值生成的哈希码值;

(2)重写后实现方式:根据对象的属性属性值生成的哈希码值。

2、toString():

(1)默认实现方式:返回对象的包名.类名@十六进制的哈希码值;

(2)重写后实现方式:返回对象的类型、属性、属性值。

3、equals():

(1)默认实现方式:比较两个对象的地址值;

(2)重写后实现方式:比较两个对象的类型、属性、属性值;

package cn.tedu;

import java.util.Objects;

/**本类用于复习String方法的属性*/
public class ReviewString03 {
    public static void main(String[] args) {
        test01 t1 = new test01();
        test02 t2 = new test02();
        System.out.println(t1.toString());//cn.tedu.test01@5594a1b5
        System.out.println(t2.toString());//test02{a=10, s='hello'}

        System.out.println(t1.equals(t2));//false

        System.out.println(t1.hashCode());//1435804085
        System.out.println(t2.hashCode());//99163593
    }
}
//本类没有重写hashCode()&toString()&equals()
class test01{
    int a = 10;
    String s = "hello";
    public static void get01(){

    }
}
//本类中重写了hashCode()&toString()&equals()
class test02{
    int a = 10;
    String s = "hello";

    @Override
    public String toString() {
        return "test02{" +
                "a=" + a +
                ", s='" + s + '\'' +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        test02 test02 = (test02) o;
        return a == test02.a &&
                Objects.equals(s, test02.s);
    }

    @Override
    public int hashCode() {
        return Objects.hash(a, s);
    }

    public static void get02(){

    }
}

(3)equals() 和 "==" 有什么区别???

答:(1)使用==比较时,如果比较的两个变量是引用类型,那么比较的是两个变量的物理地址,如果比较的两个变量都是数值类型,那么比较的是具体的数字是否相等;

(2)使用equals()比较时,实现方式要根据具体的实现决定,与顶级父类Object里的默认实现方式不同就表明重写了这个方法。

四、stringBuffer和stringBuilder

stringBuffer和stringBuilder中的append()用来拼接字符串,直接上代码:

package cn.tedu;
/**本类用于复习StringBuffer&StringBuilder*/
public class ReviewString02 {
    public static void main(String[] args) {
        /**
         * stringBuffer里面的append()用来拼接字符串
         *
         * 需求:将helloWord拼接10000次
         */
        String str = "helloWord";
//        method1(str);//本方法用于普通方式拼接
        method2(str);//本方法使用append()拼接
    }

    private static void method2(String str) {
        StringBuffer append = null;
        StringBuffer sb = new StringBuffer();
        long s = System.currentTimeMillis();
        for (int i = 0; i < 10000; i++) {
            append = sb.append(str);
        }
        System.out.println(append);
        long e = System.currentTimeMillis();
        System.out.println("拼接用的时间为:"+(e-s)+"ms");//拼接用的时间为:9ms
    }

    private static void method1(String str) {
        String result1 = null;
        long s = System.currentTimeMillis();
        for (int i = 0; i < 10000; i++) {
            result1 = result1 + str;
        }
        System.out.println(result1);
        long e = System.currentTimeMillis();
        System.out.println("拼接用的时间为:"+(e-s)+"ms");//拼接用的时间为:128ms
    }

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

啊渊啊渊.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值