文章目录
基础题
练习一:Object类equals方法
一、简述String类中的equals方法与Object类中的equals方法的不同点。
String类中的equals方法是用来判断两个对象的内容是否相同.
Object类中的equals方法是用来判断两个对象是否是同一个对象,所谓同一个对象就是内存中的同一块存储空间.地址值是否相同
练习二:Object类的toString方法
二、不运行代码,直接说出打印结果,并解释原因。
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 ";
}
}
运行结果: I love java me 2
原因 : 先加载static静态变量, 执行main方法,第一句为输出语句,并在输出语句中new了此类对象,先创建本类对象,重写了toString方法,将toString方法的打印输出,然后返回java,在执行main方法的第一行输出,
练习三:Object类equals方法
三、看下列程序,不运行说结果,写出答案后,并在IntelliJ IDEA中运行看看自己给的答案与运行结果是否正确,并分析原因。
(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类的区别
四、简述StringBuilder类与String类的区别。
答: String类的对象内容不可改变,当进行字符串拼接时,总会在内存中创建一个新的对象,所以经常改变内容的字符串最好不要用String. 因为每次生成对象都会对系统性能产生影响
StringBuilder又称为可变字符序列,是jdk5之后添加的一个类,类似于string的字符缓冲区,通过某些方法调用可以改变该序列的长度和内容. 既它是一个容器,容器中可以装很多字符串,并且能够对其中的字符串进行各种操作.它的内部拥有一个数组用来存放字符串内容,进行字符串拼接时,直接在数组中加新内容,StringBuilder会自动维护数组的扩容
练习五:Date类的使用
五、请用代码实现:获取当前的日期,并把这个日期转换为指定格式的字符串,如2088-08-08 08:08:08。
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test {
public static void main(String[] args) {
//获取当前时间对象
Date date = new Date();
//创建SimpleDateFormat对象,转换为指定格式
SimpleDateFormat sd = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
//调用sd的format(Date date)方法,传入date,接收返回的字符串
String format = sd.format(date);
//打印
System.out.println(format);
}
}
练习六:DateFormat类方法的使用
六、使用SimpleDateFormat类,把2018-03-04转换为2018年03月04日。
import sun.java2d.pipe.SpanIterator;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test {
public static void main(String[] args) throws ParseException {
//创建SimpleDateFormat类,指定格式
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");
//调用sd的parse(String str)方法传入时间
Date parse = sd.parse("2020-09-08");
//创建日期格式对象
SimpleDateFormat sd2 = new SimpleDateFormat("yyyy年MM月dd日");
//获取转换完的日期
String format = sd2.format(parse);
System.out.println(format);
}
}
练习七:Calendar类方法的使用
七、用程序判断2020年9月8日是星期几。
import java.util.Calendar;
public class Test {
public static void main(String[] args) {
//创建Calendar对象
Calendar c = Calendar.getInstance();
//将日期字段给到Calendar
c.set(2020,8,8);
//设置年
int year = c.get(Calendar.YEAR);
//设置月
int month = c.get(Calendar.MONTH)+1;
//设置日
int date = c.get(Calendar.DATE);
//设置星期
char week = getWeek(c.get(Calendar.DAY_OF_WEEK));
//输出结果
System.out.println(year+"年"+month+"月"+date+"日"+"是星期"+week);
}
//定义方法getWeek 获取星期汉字
public static char getWeek(int a){
char[] c = {' ','日','一','二','三','四','五','六'};
return c[a];
}
}
扩展题
练习八:System类arraycopy方法的使用
八、现有一个字符数组{‘i’,‘t’,‘c’,‘a’,‘s’,‘a’},请使用System类中的arraycopy()方法在控制台输出“itcast”。(提示:将[1]号数组元素复制到最后位置并覆盖原有元素。)
public class Test {
public static void main(String[] args) {
char[] a = {'i','t','c','a','s','a'};
//将a数组中的第2个元素复制到最后位置
System.arraycopy(a,1,a,5,1);
//遍历数组,在控制台输出
for (char c1 :a){
System.out.print(c1);
}
}
}
练习九:StringBuilder类的使用
九、请使用代码实现
分别使用String的 += 和StringBuilder的append方法对字符串做100000次拼接,计算String拼接100000次花费时间与StringBuilder拼接100000次所花费时间并打印。
public class Test {
public static void main(String[] args) {
//使用system的currentTimeMillis()方法获取当前操作系统的毫秒值
long start = System.currentTimeMillis();
//测试性能的代码
// testString();//花费时间21088
testStringBuilder();//花费时间8
//获取结束的毫秒数
long end = System.currentTimeMillis();
System.out.println("花费时间"+(end-start));
}
//testString
public static void testString() {
//定义字符串
String str = "hello";
//循环
for (int i = 0; i < 100000; i++) {
str += "word";
}
}
//写一个静态方法:testStringBuilder(),在方法中
public static void testStringBuilder() {
//创建一个StringBuilder对象sb,初始内容与testString()中的字符串相同
StringBuilder sb = new StringBuilder("hello");
//写一个循环100000次for循环,在循环中写上
for (int i = 0; i < 100000; i++) {
//调用sb.append()方法,传入的内容与testString()方法中+=后面的内容一样
sb.append("world");
}
//循环结束后调用sb.toString方法转换为字符串
String newStr = sb.toString();
}
}