練習一:Object類equals方法
- 一、簡述String類中的equals方法與Object類中的equals方法的不同點。
答:String類中的equals方法是用來判斷兩個對象的內(nèi)容是否相同,而Object 類中的equals方法是用來判斷兩個對象是否是同一個對象,所謂同一個對象指的是內(nèi)存中的同一塊存儲空間。
練習二:Object類的toString方法
- 二、不運行代碼,直接說出打印結(jié)果,并解釋原因。
public class ToStringTest{
static int i = 1;
public static void main(String args[]){
System.out.println("love " + new ToStringTest());//love java
ToStringTest a = new ToStringTest();
a.i++;
System.out.println("me " + a.i);//me 2
}
public String toString(){
System.out.print("I ");//I
return "java ";
}
}
- 運行結(jié)果:I love java me 2
- 原因:當執(zhí)行代碼的時候,首先加載靜態(tài)變量,然后執(zhí)行main方法,由于main方法內(nèi)部第一行代碼為輸出語句,里面new了此類對象,當執(zhí)行此行代碼時會先創(chuàng)建了本類的對象,由于此類重寫了toString方法,會先執(zhí)行toString方法的打印輸出,然后返回“java ”,再執(zhí)行main方法第一行打印輸出。在Java中“System.out.println(類對象名);”實際輸出的是該對象的toString()方法返回的字符串,即括號中的內(nèi)容等價于類對象名.toString(),toString方法的好處是在碰到println方法的時候會被自動調(diào)用,不用顯示的寫出來。
練習三:Object類equals方法
- 三、看下列程序,不運行說結(jié)果,寫出答案后,并在IntelliJ IDEA中運行看看自己給的答案與運行結(jié)果是否正確,并分析原因。
(1)
String s1 = new String("abc");
String s2 = "abc";
System.out.println(s1 == s2); //false
System.out.println(s1.equals(s2)); //true
(2)
String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2); //true
System.out.println(s1.equals(s2)); //true
(3)
String s1 = "a" + "b" + "c";
String s2 = "abc";
System.out.println(s1 == s2); //true
System.out.println(s1.equals(s2)); //true
(4)
String s1 = "ab";
String s2 = "abc";
String s3 = s1 + "c";
System.out.println(s3 == s2); //false
System.out.println(s3.equals(s2)); //true
練習四:StringBuilder類與String類的區(qū)別
- 四、簡述StringBuilder類與String類的區(qū)別。
答:- String類的對象內(nèi)容不可改變,所以每當進行字符串拼接時,總是會在內(nèi)存中創(chuàng)建一個新的對象,所以經(jīng)常改變內(nèi)容的字符串最好不要用String,因為每次生成對象都會對系統(tǒng)性能產(chǎn)生影響。
- StringBuilder又稱為可變字符序列,是JDK5.0中新增加的一個類,它是一個類似于String的字符串緩沖區(qū),通過某些方法調(diào)用可以改變該序列的長度和內(nèi)容。即它是一個容器,容器中可以裝很多字符串,并且能夠?qū)ζ渲械淖址M行各種操作。它的內(nèi)部擁有一個數(shù)組用來存放字符串內(nèi)容,進行字符串拼接時,直接在數(shù)組中加入新內(nèi)容,StringBuilder會自動維護數(shù)組的擴容。
練習五:Date類的使用
- 五、請用代碼實現(xiàn):獲取當前的日期,并把這個日期轉(zhuǎn)換為指定格式的字符串,如2088-08-08 08:08:08。
public class DateTest {
public static void main(String[] args) {
//獲取當前日期對象 now;
Date now = new Date();
//創(chuàng)建SimpleDateFormat對象 df,并制定日期格式
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//調(diào)用df的format(Date date) 方法,傳入now; 接收返回的字符串
String datestr = df.format(now);
//打印這個字符串
System.out.println(datestr);
}
}
練習六:DateFormat類方法的使用
- 六、使用SimpleDateFormat類,把2019-07-04轉(zhuǎn)換為2019年07月04日。
public class DateFormatTest {
public static void main(String[] args) throws ParseException {
//創(chuàng)建SimpleDateFormat對象df1,指定日期模式為yyyy-MM-dd
SimpleDateFormat df1 = new SimpleDateFormat("yyyy-MM-dd");
//調(diào)用df1的parse(String str)方法傳入2019-07-04,得到對應日期類型
Date date = df1.parse("2019-07-04");
//創(chuàng)建日期格式化對象df2,在獲取格式化對象時可以指定風格
DateFormat df2 = new SimpleDateFormat("yyyy年MM月dd日");
//調(diào)用df2的format(Date date) 傳入剛才轉(zhuǎn)換的日期
String str = df2.format(date);
System.out.println(str);
}
}
練習七:Calendar類方法的使用
- 七、用程序判斷2019年2月14日是星期幾。
public class CalendarTest01 {
public static void main(String[] args) {
//創(chuàng)建Calendar對象
Calendar c = Calendar.getInstance();
//將給定的日歷字段設(shè)置到Calendar對象中
c.set(Calendar.YEAR, 2019);
c.set(Calendar.MONTH, 1);
c.set(Calendar.DATE, 14);
//設(shè)置年
int year = c.get(Calendar.YEAR);
//設(shè)置月
int month = c.get(Calendar.MONTH)+1;
//設(shè)置日
int date = c.get(Calendar.DATE);
//設(shè)置星期
char week = getWeek(c.get(Calendar.DAY_OF_WEEK));
//輸出結(jié)果
System.out.println(year+"年"+month+"月"+date+"日是星期"+week);
}
//定義方法,獲取星期漢字
public static char getWeek(int a){
char[] c = {' ','日','一','二','三','四','五','六'};
return c[a];
}
}