java必备基础4(String,StringBuffer,StringStringBuiler,hashcode、equals)

目录

String

字符串的方法:

构造方法

一般方法

 StringBuffer字符串缓冲区

 StringBuilder字符串缓冲区

String  Stringbuffer Stringbulider区别

equal和==区别

hashcode与equal区别

通过么

String

特点:字符串一旦被初始化,就不可以改变,存放在方法区中的常量。

String s1 = "abc";   //s1指向的内存中有一个对象abc

String s2 = new String("abc"); //s2指向的内容中有两个对象abc 和 new。

s1 == s2  false

s1.equals(s2) true  ,字符串中equals比较的是字符串内容是否相同。

字符串的方法:

构造方法

将字节数组或字符数组转成字符串。

String s1 = new String();   //创建一个空内容的字符串

String s2 = null;                 //s2没有任何对象指向,是一个null 常量值

String s3 ="";                    //s3指向一个具体的字符串对象,只不过这个字符串没有内容

一般定义字符串时,不用 new 。直接用 String  str="abc";  这种方式。

new String(char[]);              //将字符数组转成字符串

new String(char[]);               //将字符数组中的一部分转成字符串

一般方法

1.获取

        获取字符串的长度:length();

        指定位置的字符:char charAt(index);

        获取指定字符的位置。如果不存在返回-1,所以通过返回值-1来判断字符不存在的情况。

        int  indexOf(int ch);        返回第一次找到的字角脚标

        int   indexOf(int ch,int formIndex);  返回从指定位置开始第一次找到的角标

        int   indexOf(String str);        返回第一次找到的字符串角标

        int   indexOf(String str,int fromIndex);

        int   LastIndexOf(int ch);       

        int   LastIndexOf(int ch,int formIndex); 

        int   LastIndexOf(String str);       

        int   LastIndexOf(String str,int fromIndex);

获取子串

        String substring(int start);        从start位开始,到length()-1位为止。

        String substring(int start,int end);  从start开始到end为止,不包含end位。

2.判断

        字符串中包含指定的字符串吗?         boolean contains(String str);

        字符串是否以指定字符串开头          boolean startsWith(String str);

        字符串是否以指定字符串结尾           boolean endWith(String str);

        判断字符串是否相同                        boolean equals(String str);     //覆盖了Object中的方法,判断字符串内容是否相同。

        判断字符串是否相同,忽略大小写        boolean equalsIgnoreCase(String str);

3.转换

   1. 通过构造函数可以将字符数组或者字节数组转换字符串。

   2. 可以通过字符串中的静态方法,将字符数组转成字符串。

        static  String  copyValueOf(char[] char);

        static  String  cpyeValusOf(char[] char,int offset, int count);

        static String   valueOf(char[] char);

        static String   valueOf(char[] char,int offest,int count);

3、将基本数据类型或者对象转成字符串

        static  String valueOf(char char);

        staic String  valueOf(dobble double//float folat/int  int /boolean boolean/long  long/Object object )

4.将字符串转大小写

        String toLowerCase();   String toUpperCase();

5.将字符串转成数组

        char[]  toCharArray();  转成字符数组。

        byte[]  getbyte();        可以加入编码表。转成字节数组。

6.将字符串转成字符串数组,切割方法

        String [] split();

7.将字符串进行内容替换。注意:修改后变成新字符串,并不是将原字符串直接修改。

        String replace(CharOldChar ,newChar);

        String replace(OldString,newString);

8.String concat(String string); 对字符串进行追加

        String trim();          去除字符串两端的空格

        int  compareTo();        如果参数字符串等于此字符串,则返回值0;如果此字符串按字典顺序小于字符串参数,则返回一个小于0的值;如果此字符串按字典顺序大于字符串参数,则返回一个大于0的值。

 StringBuffer字符串缓冲区

     构造一个其中不带字符的字符串缓冲区,初始容量为16个字符。

1.添加

        StringBuffer append(String data);           在缓冲区中追加数据。追加到尾部

        StringBuffer insert(index,data);               在指定位置插入数据。

2. 删除

        StringBuffer delete(start,end);            删除从start至end-1范围的元素

        StringBuffer deleteCharAt(index);        删除指定位置元素

        sb.delete(0,sb.length());                        清空缓冲区

3. 修改

        StringBuffer replace(start,end,string);        将start至end-1替换成string 

        void setCharAt(index,char);                        替换指定位置的字符

        void setLength(len);将原字符串置为指定长度的字符串

4. 查找(查不到返回—1

 int indexOf(string); 返回指定子字符串在此字符串中第一次出现处的索引。

 int indexOf(string,int fromIndex);从指定位置开始查找字符串

 int lastIndexOf(string); 返回指定子字符串在此字符串中最右边出现处的索引。

 int lastIndexOf(string,int fromIndex); 从指定的索引开始反向搜索

5. 获取子串

   string substring(start); 返回start到结尾的子串

 string substring(start,end); 返回start至end—1的子串

6. 反转

    StringBuffer reverse();字符串反转

 StringBuilder字符串缓冲区

   JDK1.5出现StringBuiler;构造一个其中不带字符的字符串生成器,初始容量为 16 个字符。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。方法和StringBuffer一样;

StringBuffer 和 StringBuilder 的区别:

StringBuffer线程安全,StringBuilder线程不安全。

单线程操作,使用StringBuilder 效率高。

多线程操作,使用StringBuffer 安全。

String  Stringbuffer Stringbulider区别

  •  String 是 final 修饰的,无法被继承。所以 String 不是 Java 的基本数据类型。字符串在 Java 中是不可变的,因此适合在多线程环境下使用。
  • “ 字符串常量” , 对象一旦创建就不可改变,这就导致如果字符串常量池中没有所需对象,每次对对象的操作都会创建一个新的对象,这样不仅效率低下,而且还会浪费大量有限的内存空间。
  • 与 StringBuilder, “字符串变量”, 是可以改变的对象, 和 String 类不同的是,和 StringBuilder 类的对象能够被多次修改,且不产生新的未使用的对象。
  •  StringBuffer 是线程安全的。
  • 在 JDK8 中:String 底层最终使用字符数组 char[] 来存储字符值;但在 JDK9 之后,JDK 维护者将其改为了 byte[] 数组作为底层存储

equal和==区别

  1. equals 是Object的方法,而 == 是操作符;
  2. 对于基本类型的变量来说(如 short、 int、 long、 float、 double),只能使用 == ,因为这些基本类型的变量没有 equals 方法。对于基本类型变量的比较,使用 == 比较, 一般比较的是它们的值。 引用数据类型:比较的是引用的地址是否相同,比如说新建了两个User对象,比较的是两个User的地址是否一样
  3.  对于引用类型的变量来说(例如 String 类)才有 equals 方法,因为 String 继承了 Object 类, equals 是 Object 类的通用方法。对于该类型对象的比较,默认情况下,也就是没有复写 Object 类的 equals 方法,使用 == 和 equals 比较是一样效果的,都是比较的是它们在内存中的存放地址。但是对于某些类来说,为了满足自身业务需求,可能存在 equals 方法被复写的情况,这时使用 equals 方法比较需要看具体的情况,例如 String 类,使用 equals 方法会比较它们的值;

hashcode与equal区别

  • ==对比的是栈中的值,基本数据类型是变量值,引用类型是堆中内存对象的地址 。
  • equals:object中默认也是采用==比较,通常会重写。
  • 如果两个对象相等,则hashcode一定也是相同的
  • 两个对象相等,对两个对象分别调用equals方法都返回true
  • 两个对象有相同的hashcode值,它们也不一定是相等的
  • 因此,equals方法被覆盖过,则hashCode方法也必须被覆盖
  • hashCode()的默认行为是对堆上的对象产生独特值。如果没有重写hashCode(),则该class的两个对象无论如何都不会相等(即使这两个对象指向相同的数据)。

使用场景

        hashCode():顶级父类Object的方法,返回值类型为int类型的值,根据一定的规则(存储地址,字段,长度等等)生成一个数组,数据保存的就是Hash值

        equals():顶级类Object中的方法,根据一定的比较规则,判断对象是否一致,底层一般逻辑:

            1.判断两个对象的内存地址是否一样

            2.非空判断和Class类型判断

            3.强转

            4.对象中的字段一一匹配

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

what_2018

你的鼓励是我前进的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值