1,简述String类中的equals方法与Object类中的equals方法的不同点。
①Java中其他类都是Object类的子类,Object类中的equals()方法比较的是两个对象的地址。
②String中equals()方法比较的是两个对象的值是否相同
2,编写程序,(Scanner)当以年-月-日的格式输入一个日期时,输出其该年是否为闰年,该月有几天,该日是星期几;
package demo;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;
class WeekCaseException extends Exception {
public WeekCaseException() {
}
public WeekCaseException(String me){
super(me);
}
}
class Demo01{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入日期:");
String str = sc.nextLine();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
date = sdf.parse(str);
} catch (ParseException e) {
e.printStackTrace();
}
//把Date类型转为Calendar类型
Calendar c = Calendar.getInstance();
c.setTime(date);
//提取年月日
int year = c.get(Calendar.YEAR);
GregorianCalendar gc = new GregorianCalendar();
if(gc.isLeapYear(year)){
System.out.println(year+"是闰年");
}else{
System.out.println(year+"不是闰年");
}
//获得月字段天数的最大值
int day = c.getActualMaximum(Calendar.DAY_OF_MONTH);
System.out.println("该月有"+day+"天");
//获得周几
int i = c.get(Calendar.DAY_OF_WEEK) - 1;
String week = "";
try {
week = matching(i);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("今天是周"+week);
}
public static String matching(int i) throws Exception {
String s = "";
switch (i) {
case 0:
s = "日";
break;
case 1:
s = "一";
break;
case 2:
s = "二";
break;
case 3:
s = "三";
break;
case 4:
s = "四";
break;
case 5:
s = "五";
break;
case 6:
s = "六";
break;
default:
throw new WeekCaseException("超出了正常一周范围");
}
return s;
}
}
3,计算某年、某月、某日和某年、某月、某日之间的天数间隔和周数。
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Demo02 {
public static void main(String[] args) throws ParseException {
String s1 = "2020-10-26";
String s2 = "2019-11-06";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//把字符串时间解析为Date对象
Date d1 = sdf.parse(s1);
Date d2 = sdf.parse(s2);
//分别获得两个日期的long类型毫秒数
long date1 = d1.getTime();
long date2 = d2.getTime();
//两个时间相隔的毫秒数
long d = date1 - date2;
//一天的毫秒数
final long day = 86400000;
//相隔多少天
System.out.println(s1+"与"+s2+"相隔"+(d / day)+"天,相隔"+(d/day/7)+"周");
}
}
4,简述StringBuilder类与string类的区别
①工作原理不同:String 类是一种传统的修改字符串的方式,它确实可以完成把一个字符串添加到另一个字符串上的工作没错,但是在.NET 框架下,这个操作实在是划不来。因为系统先是把 两个字符串写入内存,接着删除原来的 String 对象,然后再创建一个 String 对象,并读取内存 中的数据赋给该对象。这一来二去的,耗了不少时间。而使用 System.Text 命名空间下面的 StringBuilder 类就不是这样了,它提供的 Append 方法,能够在已有对象的原地进行字符串的修改,简单而且直接。
5,计算自己出生了多少天?
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class Demo03 {
public static void main(String[] args) throws Exception {
System.out.println("请输入出生日期 格式 YYYY‐MM‐dd");
// 获取出生日期,键盘输入
String birthdayString = new Scanner(System.in).next();
//创建SimpleDateFormat对象实例并定义好转换格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// 调用方法parse,字符串转成日期对象
Date birthdayDate = sdf.parse(birthdayString);
// 获取今天的日期对象
Date todayDate = new Date();
// 将两个日期转成毫秒值,Date类的方法getTime
long birthdaySecond = birthdayDate.getTime();
long todaySecond = todayDate.getTime();
long secone = todaySecond - birthdaySecond;
if (secone < 0) {
System.out.println("你还没出生呢");
} else {
System.out.println("你已经出生"+ secone / 1000 / 60 / 60 / 24+"天了!");
}
}
}
6,求一个for循环 执行时间?
public class Demo04 {
public static void main(String[] args) {
int a = 0;
int x = 10000;
for (int i = 0; i < x; i++) {
a = 2*x;
}
System.out.println(a/1000);
}
}
