2021-09-06 Object String笔记详解:

目录

No1 StudyPoint: Object 

常用方法:

No2 StudyPoint: toString()的重写

No3 StudyPoint: equals的使用

equals()和==的区别?

No4 StudyPoint: java.lang.String

No5 StudyPoint: String中的方法

1、[int] length():

2、[char] charAt(int index):

练习:判断字符串是否是回文串串:

3、[int] indexOf(String str):

练习:判断字符串中某段出现的次数:

4、[int] lastIndexOf(String str):

5、[String] substring(int beginIndex):

6、[boolean] startsWith(String str):

7、[boolean] endsWith(String str):

8、[char[]] toCharArray():

练习:给字符串转化为数组排序:

9、[String] toUpperCase():

10、[String] toLowerCase():

11、 [String] trim():

12、 [String] concat(String str):

13、 [boolean] contains(String str):

14、 [boolean] isEmpty():

15、 [String] replace(char oldChar,char newChar):

16、 [String] valueOf():

以下三个为正则表达式方法(附链接):

17、[boolean] matches(String regex):

18、[String] split(String regex):

19、[String] replaceAll(String regex,String str):

关于String的StringBuilder和StringBuffer:


No1 StudyPoint: Object 

java.lang.Object是所有类的父类,也就是说java中所有类都继承了Object,都可以使用Object的方法
Object类中有12个方法,但是有一个是private修饰的方法,还有3个是重载的wait()方法
所以实际上子类使用的只有9个方法。


常用方法:

① [String] toString():返回该对象的字符串表示,即地址值
② [int] hashCode():返回对象的哈希码值
③ [boolean] equals(Object o):判断其他某个对象与此对象是否相当,即地址值是否相同
---
Object clone():创建并返回此对象的一个副本
void finalize():当垃圾回收器不确定存在该对象的更多应用时,由对象的垃圾回收器调用此方法
---
线程相关:wait()、notify()、notifyAll();
反射相关:getClass();


No2 StudyPoint: toString()的重写

直接输出对象,默认调用Object的toString方法,展示对象的地址值
如果想要输出对象中的内容,可以重写
如果想看对象的属性值,不想看对象的地址值就重写toString()
否则可以不重写。重写后的字符串内容和格式都可以自定义


No3 StudyPoint: equals的使用

 Object类中提供的equals方法比较的是两个对象的地址值,如果想要使用属性进行比较,则需要重写equals()。通常情况下,equals()会和hashCode()进行成对书写,因为在比较时需要计算属性的哈希码值。


equals()和==的区别?

① ==可以比较基本类型,也可以比较引用类型;equals只能比较引用类型。
② ==比较基本类型时比较的是值本身,比较引用类型比较的是地址值;
   Object类中的equals()使用的是“==”,比较的是引用类型的地址值;
   如果重写以后,按照重写时定义的规则进行比较。


No4 StudyPoint: java.lang.String

String是不可变的字符串对象。
String对象一旦被创建,内容不可修改,若改变则必须创建新对象;因为String内部维护的是一个被final修饰的char类型数组,用来保存字符串的所有字符。

String类重写了equals()方法,可以直接用来比较简单字符串是否相等。

【s1、s2】

采用字面值的方式创建字符串时,JVM首先会到字符串常量池中查找是否u才能在该字符串对象。

如果不存在,则在字符串常量值中创建这个对象,然后这个对象的地址返回给这个对象的引用(例如s1); 如果存在,则不创建新对象,直接将常量池中已经存在的对象地址返回,赋值给新的引用(例如s2)。

因此,s1和s2指向的是字符串常量值中的同一个对象,所以==比较的结果为true

        String s1 = "123abc";
        String s2 = "123abc";
        System.out.println(s1 == s2);//true
        System.out.println(s1.equals(s2));//true

【s3】

编译器有一个特点:
        在编译的时候如果遇到一个计算表达式在编译期间就可以确定结果,那么编译器就会直接进行计算并编译到.class文件中, (比如 1+2 -> 3;"123"+"abc" -> 123abc),虚拟机在运行时会重用之前的123abc,不会创建新的对象。

         String s3 = "123"+"abc";//编译器优化,直接拼接,不创建对象
         System.out.println(s1 == s3);//true

【s5、s6】     

当涉及到变量拼接时,编译器无法确定结果,所以不存在优化操作,直接创建新对象。

        String s4 = "123";
        String s5 = s4 + "abc";
        System.out.println(s1 == s5);//false

        String s6 = s1 +"!";
        System.out.println(s1 == s6);//false

【s7】

使用new关键字创建字符串对象时, jvm会先在字符串常量值中查找是否有对应的字符串,如果有,则直接使用;如果没有,会在字符串常量池中创建一个,然后将这个字符串对象的地址值交付给堆中的String对象。

s7这个引用保存的是在堆中new出来的对象的地址值,而不是直接保存字符串常量池中的地址值,所以false。

        String s7 = new String("123abc");
        System.out.println(s1 == s7);//false

【汇总】

No5 StudyPoint: String中的方法

1、[int] length():

获取当前字符串的长度,即字符个数

问:数组有没有length方法?字符串有没有length属性?

答:数组有的是length属性,数组名.length表示数组的长度; 字符串有的是length()方法,字符串.length()表示获取当前字符串长度,返回一个int类型的值

        String s = "BaoYang";
        System.out.println(s.length());//输出:7

2、[char] charAt(int index):

获取指定索引处的字符

        String s = "BaoYang";
        System.out.println(s.charAt(3));//输出:Y
        System.out.println(s.charAt(9));//数组下标越界异常

练习:判断字符串是否是回文串串:

        String line = "上海自来水来自海上";
        int count = 0;//定义计数器
        for(int i = 0;i<line.length()/2;i++){
            if(line.charAt(i) =
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值