JAVA-基础-常用API(equals,tostring方法,String类)

       Java的API及Object类

java的 API -applicatio(应用),programming(程序),interface(接口)

Java API就是JDK中提供给我们使用的类,这些类将底层的代码实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可。

  Object类概述

Object类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。所有类在创建对象的时候,最终找的父类就是Object。

equals方法  与  toString方法

equals方法,用于比较两个对象是否相同,它其实就是使用两个对象的内存地址在比较。Object类中的equals方法内部使用的就是==比较运算符。

在开发中要比较两个对象是否相同,经常会根据对象中的属性值进行比较,也就是在开发经常需要子类重写equals方法根据对象的属性值进行比较。如下代码演示:

/*
     描述人这个类,并定义功能根据年龄判断是否是同龄人
     由于要根据指定类的属性进行比较,这时只要覆盖Object中的equals方法
     在方法体中根据类的属性值进行比较
 */
class Person extends Object{
    int age ;
    //复写父类的equals方法,实现自己的比较方式
    public boolean equals(Object obj) {
        //判断当前调用equals方法的对象和传递进来的对象是否是同一个
        if(this == obj){
            return true;
        }
        //判断传递进来的对象是否是Person类型
        if(!(obj instanceof Person)){
            return false;
        }
        //将obj向下转型为Perosn引用,访问其属性
        Person p = (Person)obj;
        return this.age == p.age;
    }
}
注意:在复写Object中的equals方法时,一定要注意public boolean equals(Object obj)的参数是Object类型,
在调用对象的属性时,一定要进行类型转换,在转换之前必须进行类型判断。

instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,
这个对象是否是这个特定类或者是它的子类的一个实例
 

toString方法,返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。

class Person extends Object{
    int age ;
    //根据Person类的属性重写toString方法
    public String toString() {
        return "Person [age=" + age + "]";
    }
}

        String类

查阅API中的String类的描述,发现String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。

一旦这个字符串确定了,那么就会在内存区域中就生成了这个字符串。字符串本身不能改变,但str变量中记录的地址值是可以改变的。

字符串的本质是一个字符的数组。

String s3 = "abc";//内存中只有一个对象,在字符串常量池中
String s4 = new String("abc");//在内存中有两个对象,一个new的对象在堆中,一个字符字串本身对象
System.out.println(s3==s4);//false
System.out.println(s3.equals(s4));//true,

因为String重写了equals方法,建立了字符串自己的判断相同的依据(通过字符串对象中的字符来判断)

l  s3创建,在内存中只有一个对象。这个对象在字符串常量池中

l  s4创建,在内存中有两个对象。一个new的对象在堆中,一个字符串本身对象,在字符串常量池中

 

 

string字符串类型:string是引用类型,在设计之初,虚拟机就对他做了特殊优化,将字符串保存在虚拟机内部的字符串长量池中。一旦我们要创建一个字符串,虚拟机会先去常量池中检查是否创建过这个字符串,若有则直接引用。
String对象因为有了上述的优化,就该保证该对象的内容自创建开始就不能改变,所以对该字符串的任何变化都会创建新的对象。在比较字符串的时候我们通常的做法是使用equals方法,字符串重写了Object的equals方法。用于比较字符串内容是否一致。当我们将一个字符串变量与一个字面量进行等值比较时,我们不要调用变量的.equals方法,二是应该调用字面量的.equals方法。原因在于我们不能保证变量不是NUll,若变量为NULL,则会抛出空指针异常。导致程序退出。
String自己实现的比较方法,该方法可以忽略字符串大小写问题:equalsignoreCase方法
String s3 ="hello";
if("hello".equelsIgnoreCase(s3)){
 System.out.println("字符串内容是“hello”");
}else{
  System.out.println("字符串内容不相等");
}

 

   String类构造方法

  String s1 = new String(); //创建String对象,字符串中没有内容
    
    byte[] bys = new byte[]{97,98,99,100};
    String s2 = new String(bys); // 创建String对象,把数组元素作为字符串的内容
String s3 = new String(bys, 1, 3); //创建String对象,把一部分数组元素作为字符串的内容,
                       //参数offset为数组元素的起始索引位置,参数length为要几个元素
char[] chs = new char[]{’a’,’b’,’c’,’d’,’e’}; String s4 = new String(chs); //创建String对象,把数组元素作为字符串的内容

String s5 = new String(chs, 0, 3);//创建String对象,把一部分数组元素作为字符串的内容,
                      //参数offset为数组元素的起始索引位置,参数count为要几个元素
String s6 = new String(“abc”); //创建String对象,字符串内容为abc

String类的方法查找

字符串是一个对象,那么它的方法必然是围绕操作这个对象的数据而定义的。

int length() 方法,             返回此字符串的长度

String str = "abcde";
int len = str.length();
System.out.println("len="+len);

substring(int  beginIndex)方法           返回一个新的字符串,它是此字符串的一个子字符串(指定位置到末尾的所有字符)

substring(int beginindex ,int endindex)方法       返回新字符串,次字符串的子字符串(指定位置开始到指定位置结束的字符)

String str = "abcde";
String s1 = str.substring(1); //返回一个新字符串,内容为指定位置开始到字符串末尾的所有字符
String s2 = str.substring(2, 4);//返回一个新字符串,内容为指定位置开始到指定位置结束所有字符
System.out.println("str="+str);
System.out.println("s1="+s1);
System.out.println("s2="+s2);

startWith(String prefix)      测试此字符串是否以指定前缀开始

endsWith(String suffix)  测试此字符串是否以指定后缀结束

String str = "StringDemo.java";
boolean b1 = str.startsWith("Demo");//判断是否以给定字符串开头
boolean b2 = str.startsWith("String");
boolean b3 = str.endsWith("java");//判断是否以给定字符串结尾

contains (CharSequence s)   测试是否包含指定字符串 返回true或false         boolean

indexOf(String str)  测试是否包含指定字符串,包含则返回该字符串第一次出现的时的索引,不包含则返回-1      int

String str = "abcde";
int index = str.indexOf(“bcd”); //判断是否包含指定字符串,包含则返回第一次出现该字符串的索引,不包含则返回-1
boolean b2 = str.contains("bcd");//判断是否包含指定字符串,包含返回true,不包含返回false

getBytes()  使用平台默认字符集 将此String编码为 byte 序列 并将结果储存到新的 byte数组中         byte[]

toCharArray()  将字符串转换为一个新的字符数组     char[]

String str = "abcde";
char[] chs = str.toCharArray();//转换为字符数组
byte[] bytes = str.getBytes();//转换为字节数组

equels(Object anObject)   将此字符串与指定的对象比较    boolean

equelsIgnoreCore(String anotherString)   将此String与另一个String比较 不考虑大小写        boolean

String str = "abcde";
String str2 = "abcde";
String str3 = "hello";
boolean b1 = str.equals(str2);//true
boolean b2 = str.equals(str3);//false

toString()   返回此对象本身(它已经是一个字符串)------------------------获取该字符串对象中的内容

String str = new String("hello");
System.out.println( str.toString() );
System.out.pintln( str );
//
直接打印引用类型变量时,默认调用该类型进行重写后的toString方法
 

猜你喜欢

转载自www.cnblogs.com/zhangwei2065289/p/9220925.html