java基础学习12(object、字符串、StringBuffer与StringBuilder的区别)

Object

Object类是所有类的终极父类。 任何一个类都继承了Object类。

  1. toString(); 返回该对象的字符串表示。 返回一个字符串用于描述该对象的。
    重写toString之后,我们直接输出一个对象的时候,就会输出符合我们所需求的格 式数据。
    2.equals(Object obj) 用于比较两个对象的内存地址,判断两个对象是否为同一个对象。
    3.hashCode() 返回该对象的哈希码值(大家可以把哈希码就 理解成是对象的内存地址)

java中的规范:一般我们重写了一个类的equals方法,我们都会重写它的hashCode方法。

class Student{
    public String name;

    public String cardId;

    public int age;

    public Student(){}

    public Student(String name,int age,String cardId){
        this.age = age;
        this.name = name;
        this.cardId = cardId;
    }

    @Override
    public String toString() {
        return this.name+"---"+this.age;
    }

    @Override
    public boolean equals(Object obj) {
        Student s = (Student)obj;
        return s.cardId == this.cardId;
    }

    @Override
    public int hashCode() {
        return super.hashCode();
    }
}


public class Test {
    public static void main(String[] args) throws Exception {
        Student s1 = new Student("小张", 22, "5");
        Student s2 = new Student("张三", 22, "5");

        System.out.println(s1.equals(s2));//false
        System.out.println(s1);//小张---20
    }
} 

字符串

public class Test {
    public static void main(String[] args) throws Exception {
        String str1 = "hello";
        String str2 = "hello";

        String str3 = new String("hello");
        String str4 = new String("hello");

        System.out.println("str1==str2?"+(str1==str2));  // true
        System.out.println("str2==str3?"+(str2==str3));  //false
        System.out.println("str3==str4?"+(str3==str4));  // false
        System.out.println("str3.equals(str2)?"+(str3.equals(str4))); //true
    }
}    

在这里插入图片描述
声明一个字符串与new String()的区别?
申明一个字符串时(如上图s2)建立1个或0个对象,new一个对象(如上图s2)会建立2个或1个对象。java为了防止值相等的String建立过多的情况,搞了一个字符串常量池。当你申明一个字符串时会先去字符串常量池中查找是否存在相同值的字符串,没有则在字符串常量池中分配空间存放值,有则不再建立。当你new 一个字符串时,首先去字符串常量池中查看是否存在相同值的字符串,如果没有则在字符串常量池中分配空间,之后会在堆分配的空间中存存储字符串常量池中分配空间。

构造函数

  1. String() 创建一个空内容 的字符串对象。
  2. String(byte[] bytes) 使用一个字节数组构建一个字符串对象
  3. String(byte[] bytes, int offset, int length)
    bytes : 要解码的数组
    offset: 指定从数组中那个索引值开始解码。
    length: 要解码多个元素。
  4. String(char[] value) 使用一个字符数组构建一个字符串。
  5. String(char[] value, int offset, int count) 使用一个字符数组构建一个字符串, 并指定开始的索引值,与使用字符个数。
  6. String(int[] codePoints,int offset,int count)
  7. String(String original)

获取方法

  1. length() 获取字符串的长度
  2. charAt(int index) 获取特定位置的字符 (角标越界)
  3. indexOf(String str) 查找子串第一次出现的索引值,如果子串没有出现 在字符串中,那么则返回-1表示。
  4. lastIndexOf(String str) 查找子串最后一次出现的索引值 , 如果子串没有出现 在字符串中,那么则返回-1表示

判断方法

  1. endsWith(String str) 是否以指定字符结束
  2. isEmpty()是否长度为0 如:“” null V1.6
  3. contains(CharSequences) 是否包含指定序列 应用:搜索
  4. equals(Object anObject) 是否相等
  5. equalsIgnoreCase(String anotherString) 忽略大小写是否相等

转换方法

  1. toCharArray() 将字符串转换为字符数组
  2. getBytes(); 将字符串转换为字节数组

其他方法

  1. replace(String oldChar, String newChar) 替换
  2. split(String regex) 切割
  3. substring(int beginIndex) 指定开始 的索引值截取子串
  4. substring(int beginIndex, int endIndex)指定开始 与结束的索引值截取子串
  5. toUpperCase() 转大写
  6. toLowerCase() 转小写
  7. trim() 去除字符串首尾的空格

StringBuffer与StringBuilder

字符串特点:字符串是常量,当字符串的内容一旦发生了变化,那么马上会创建一个新的对象。
注意: 字符串的内容不适宜频繁修改,因为一旦修改马上就会创建一个新的对象。

如果需要频繁修改字符串 的内容,建议使用字符串缓冲 类(StringBuffer)。

tringBuffer 其实就是一个存储字符的容器。

使用Stringbuffer无参的构造函数创建一个对象时默认的初始容量是16。 字符数组的长度不够使用则自动增长1倍.

增加

  • append(boolean b) 可以添加任意类型 的数据到容器中
  • insert(int offset, boolean b) 指定插入的索引值,插入对应 的内容。

删除

  • delete(int start, int end) 根据指定的开始与结束的索引值删除对应的内容
  • deleteCharAt(int index) 根据指定 的索引值删除一个字符。

修改

  • replace(int start, int end, String str) 根据指定 的开始与结束索引值替代成指定的内容。
  • reverse() 翻转字符串缓冲类的内容。
  • setCharAt(int index, char ch) 把指定索引值的字符替换指定的字符。
  • substring(int start, int end) 根据指定的索引值截取子串。
  • ensureCapacity(int minimumCapacity) 指定StringBuffer内部的字符数组长度的。

查看

  • indexOf(String str, int fromIndex) 查找指定的字符串第一次出现的索引值,并且指定开始查找的位置。
  • lastIndexOf(String str)
  • capacity() 查看当前字符数组的长度。
  • length()
  • charAt(int index)
  • toString() 把字符串缓冲类的内容转成字符串返回。

StringBuffer 与 StringBuilder的相同处与不同处:
相同点:
1. 两个类都是字符串缓冲类。
2. 两个类的方法都是一致的。
不同点:
1. StringBuffer是线程安全的,操作效率低 ,StringBuilder是线程非安全的,操作效率高。
2. StringBuffer是jdk1.0出现 的,StringBuilder 是jdk1.5的时候出现的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值