【Java基礎】2020.01.07Object類

Object類常用方法

方法名 功能說明
public boolean equals(Object obj) 比較兩個對象的內容是否相等
public final Class getClass() 獲取當前對象所屬類型,返回Class對象
public String toString() 將當前對象轉換成字符串
protected Object clone() 生成當前對象的一個備份,並返回這個副本
public int hashCode() 返回當前對象的散列碼

1.equals()方法

Object類中的equals方法

    public boolean equals(Object obj) {
        return (this == obj);
    }

Integer類中的equals方法

    public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
    }

String類中的equals方法

   public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

① == 比較的是兩個對象的地址,在Object父類中,equals 等效 ==
② 基本數據類型用==進行比較
③ Object類中的equals方法比較的也是兩個對象的地址,但是在很多類中都進行了重寫,重寫爲比較兩個對象的內容,如String類,Integer類
例子1:

	public static void main(String[] args) {
		Integer obj1 = new Integer(5);
		Integer obj2 = new Integer(15);
		Integer obj3= new Integer(5);
		Integer obj4 = obj2;
		System.out.println("obj1與obj2比較:"+obj1.equals(obj2));//false
		System.out.println("obj1與obj3比較:"+obj1.equals(obj3));
				//true  Integer 類對equale類進行了重寫,比較兩個對象的內容是否相等
		System.out.println("obj2與obj4比較:"+obj2.equals(obj4));//true
		System.out.println("**************************");
		System.out.println("obj1與obj2比較:"+(obj1==obj2));//false地址不同
		System.out.println("obj1與obj3比較:"+(obj1==obj3));//false地址不同
		System.out.println("obj2與obj4比較:"+(obj2==obj4));//true,兩個引用是同一個地址
	}

例子2:

public static void main(String[] args) {
		Integer obj1 = new Integer(5);
		Integer obj2 = new Integer(15);
		Integer obj3= new Integer(5);
		Integer obj4 = obj2;
		System.out.println("obj1與obj2比較:"+obj1.equals(obj2));//false
		System.out.println("obj1與obj3比較:"+obj1.equals(obj3));
				//true  Integer 類對equale類進行了重寫,比較兩個對象的內容是否相等
		System.out.println("obj2與obj4比較:"+obj2.equals(obj4));//true
		System.out.println("**************************");
		System.out.println("obj1與obj2比較:"+(obj1==obj2));//false地址不同
		System.out.println("obj1與obj3比較:"+(obj1==obj3));//false地址不同
		System.out.println("obj2與obj4比較:"+(obj2==obj4));//true,兩個引用是同一個地址
		
	}

2.toString()方法

Object類中的toString()方法用於獲取對象的描述信息,方法返回包含類名和散列碼的字符串。
採用一下格式
getClass().getName()+’@’+Integer.toHexString(hashCode())

3.String()類

1、String 類型概述

String類代表字符串, Java程序中的所有字符串文字(例如"abc" ) 都被實現爲此類的實例。也就是說,Java程序中所有的雙引號字符串,都是String 類的對象。String 類在java.lang包下,所以使用的時候不需要導包!

2、String類的特點

1.字符串不可變,它們的值在創建後不能被更改
2. 雖然String的值是不可變的,但是它們可以被共享
3.字符串效果上相當於字符數組( char[] ),但是底層原理是字節數組( byte[] )

3、創建字符串對象兩種方式的區別

① 通過構造方法創建
通過new創建的字符串對象,每一次new都會申請一一個內存空間 ,雖然內容相同,但是地址值不同
②直接賦值方式創建
以“”方式給出的字符串,只要字符序列相同(順序和大小寫) ,無論在程序代碼中出現次,JVM都只會建立一個 String對象,並在字符串池中維護。
例子:

		//string 的三種初始化方式
		String str1 = "I am string!";
		String str2 = new String("I am string!");
		String str3 ;

4、不同類型與字符串類型轉換

		str3 = "I am string";
		//字符串->整型
		int number = 1;
		String str4 = number + "";
		int number1 = 1;
		String str5 = Integer.toString(number1);
		//整型->字符串
		String str6 ="123";
		int number3 = Integer.parseInt(str6);
		//浮點型-> 字符串
		double number4 = 3.14;
		String str7 = number4 + "";
		String str8 = Double.toString(number4);
		//字符串->浮點型
		String str9 = "1.23";
		double number5 = Double.parseDouble(str9);

5、string常用方法

方法 說明
charAt(int index) 返回指定下標index對應的字符
concat(String str) 連接兩個字符串返回組合後的字符串
endsWith(String suffix) 判斷字符是否以suffix字符串結尾,true/false
startWith(String suffix) 判斷字符是否以suffix字符串開頭,true/false
equals(Object obj) 判斷兩個字符串是否相等,true/false
indexOf(String suffix) 返回子串suffix對應的下標
lastIndexOf(String suffx) 返回子串suffix在字符串中最後一次出現的位置
length() 返回字符串的長度
matches(String regex) 判斷字符串是否與正則表達式匹配
replace(char oldChar, char newChar) 字符串中舊的子串oldChar替換成新的子串newChar
split(String regex) 按regex對字符串進行拆分,返回字符串數組
substring(int beginIndex, int endIndex) 截取指示下標範圍內的子串,返回子字符串[beginIndex , endIndex)
trim() 去字符串前和後的空格

Demo:

package com.hyg.StringDemo;

public class StringReverseDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(reverse("qwertgyhju"));
	}
	public static String reverse(String string){
		String result = "";
		for(int i = string.length()-1;i>=0;i--){
			result = result+string.charAt(i);
		}
		return result;
	}

}


Demo2:

package com.hyg.StringDemo;

public class StringIndexOfDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String string ="helloworld!";
		int i = string.indexOf("l");
		int a = string.indexOf("he");
		int b = string.indexOf("worlde");
		System.out.println("i="+i+" ,a = "+a+",b  = "+b);
		String string1 = string.substring(2);
		String string2= string.substring(2,5);
		System.out.println("string1="+string1+" ,string2= "+string2);
		String str = "  heool world!  ";
		System.out.println(str.trim());
		System.out.println();
	}

}

Demo3:

package com.hyg.StringDemo;

import java.util.Scanner;

public class CharAtDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		String string = sc.nextLine();
		sc.close();
		char c;
		int big = 0,small = 0,num = 0;
		for (int i = 0; i < string.length(); i++) {
			c = string.charAt(i);
			if (48 <= c && c <= 57) //數字
				num++;
			if (65 <= c && c <= 90) //大寫
				big++;
			if (97 <= c && c <= 122) //小寫
				small++;
		}
		System.out.println("大寫有"+big+"個,小寫有"+small+"個,數字有"+num+"個"+string);
	}

}

6、String 、StringBuffer和StringBuilder的區別

String:任何對它內容的改變,都會產生新的對象,適合操作數量小的字符串。
StringBuffer:任何對它內容的改變,不會產生新的對象,適合操作數量大的字符串,操作速度快,適合多線程操作、常見的方法有append()追加 、reverse() 內容反轉。
StringBuilder:任何對它內容的改變,不會產生新的對象,適合操作數量大的字符串,操作速度快,線程不安全、不適合多線程操作。

*注

1、內部類:也可以添加訪問修飾符
2、同級類:不可以添加訪問修飾符,一個Java文件中可以有多個同級類,但只能有一個公有的類
3、Integer類是對int的包裝類

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章