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的包裝類