1.简述String类中的equals方法与Object类中的equals方法的不同点。
答: String类中的equals方法是用来判断两个对象的内容是否相同,Object类中的equals方法是用来判断两个对象是否是内存的同一块内存空间。
2.下列代码运行结果
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("aa " + a.i);//aa 2 } public String toString(){ System.out.print("I ");//I return "java "; } }
I love java
aa 2
原因:当执行代码的时候,首先加载静态变量,然后执行main方法,由于main方法内部第一行代码为输出语句,里面new了此类对象,当执行此行代码时会先创建了本类的对象,由于此类重写了toString方法,会先执行toString方法的打印输出,然后返回“java ”,再执行main方法第一行打印输出。在Java中“System.out.println(类对象名);”实际输出的是该对象的toString()方法返回的字符串,即括号中的内容等价于类对象名.toString(),toString方法的好处是在碰到println方法的时候会被自动调用,不用显示的写出来。
3.下列代码运行结果
(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
4.简述StringBuilder类与String类的区别。
答:String类的对象内容不可改变,所以每当进行字符串拼接时,总是会在内存中创建一个新的对象,所以经常改变内容的字符串最好不要用String,因为每次生成对象都会对系统性能产生影响。
StringBuilder又称为可变字符序列,是JDK5.0中新增加的一个类,它是一个类似于String的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容。即它是一个容器,容器中可以装很多字符串,并且能够对其中的字符串进行各种操作。它的内部拥有一个数组用来存放字符串内容,进行字符串拼接时,直接在数组中加入新内容,StringBuilder会自动维护数组的扩容。
5.模拟在一副牌中,抽取第1张,第5张,第50张扑克牌。
public class Test3 { public static void main(String[] args) { // 获取所有扑克牌 String[] puke = getPuke(); // 抽取指定的三种扑克牌 int num1 = 1; int num2 = 5; int num3 = 50; String[] pk3 = get3(puke , num1 ,num2,num3); // 打印抽取的牌 for (int i = 0; i < pk3.length; i++) { System.out.print(pk3[i] + " "); } } private static String[] getPuke() { String[] colors={"黑色","红桃","梅花","方块"}; String[] nums={"A","2","3","4","5","6","7","8","9","10","J","Q","K"}; String[] puke = new String[54]; int index = 0; for (int i = 0; i < nums.length; i++) { for (int j = 0; j < colors.length; j++) { puke[index] = colors[j]+nums[i]; index ++; } } puke[52] = "小王"; puke[53] = "大王"; return puke; } public static String[] get3(String[] puke, int i, int i2, int i3) { String[] pk3 = new String[3]; pk3[0] = puke[i - 1]; pk3[1] = puke[i2 - 1]; pk3[2] = puke[i3 - 1]; return pk3; } }
6.获取当前的日期,并把这个日期转换为指定格式的字符串,如2088-08-08 08:08:08。
public class DateTest { public static void main(String[] args) { //获取当前日期对象 now; Date now = new Date(); //创建SimpleDateFormat对象 df,并制定日期格式 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //调用df的format(Date date) 方法,传入now; 接收返回的字符串 String datestr = df.format(now); //打印这个字符串 System.out.println(datestr); } }
7.使用SimpleDateFormat类,把2018-05-04转换为2018年05月04日。
public class DateFormatTest { public static void main(String[] args) throws ParseException { //创建SimpleDateFormat对象df1,指定日期模式为yyyy-MM-dd SimpleDateFormat df1 = new SimpleDateFormat("yyyy-MM-dd"); //调用df1的parse(String str)方法传入2018-05-04,得到对应日期类型 Date date = df1.parse("2018-05-04"); //创建日期格式化对象df2,在获取格式化对象时可以指定风格 DateFormat df2 = new SimpleDateFormat("yyyy年MM月dd日"); //调用df2的format(Date date) 传入刚才转换的日期 String str = df2.format(date); System.out.println(str); } }
8.现有一个字符数组{‘i’,’t’,’c’,’a’,’s’,’a’},请使用System类中的arraycopy()方法在控制台输出“itcast”。(提示:将[1]号数组元素复制到最后位置并覆盖原有元素。)
public class ArraycopyTest { public static void main(String[] args) { char[] cha ={'i','t','c','a','s','a'}; //将cha数组中第2个元素,复制到目标数组最后一位数组上 System.arraycopy(cha, 1, cha, 5, 1); //遍历目标数组,在控制台输出字符串 for (int i = 0; i < cha.length; i++) { System.out.print(cha[i]); } } }
9.用程序判断2018年2月14日是星期几
public class CalendarTest01 { public static void main(String[] args) { //创建Calendar对象 Calendar c = Calendar.getInstance(); //将给定的日历字段设置到Calendar对象中 c.set(Calendar.YEAR, 2018); c.set(Calendar.MONTH, 1); c.set(Calendar.DATE, 14); //设置年 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); } //定义方法,获取星期汉字 public static char getWeek(int a){ char[] c = {' ','日','一','二','三','四','五','六'}; return c[a]; } }
10.分析以下需求,并用代码实现:
(1)定义数字字符串数组{“010″,”3223″,”666″,”7890987″,”123123”};
(2)判断该数字字符串数组中的数字字符串是否是对称(第一个数字和最后一个数字相等,第二个数字和倒数第二个数字是相等的,依次类推)的,并逐个输出;
(3)如:010 是对称的,3223 是对称的,123123 不是对称的;
(4)最终打印该数组中对称字符串的个数。
public class StringBuilderTest02 { public static void main(String[] args) throws IOException { //定义数字字符串数组 String[] str = {"010","3223","666","7890987","123123"}; SBTest(str); } public static void SBTest(String[] str) { int count = 0; //遍历定义的字符串数组 for (String string : str) { //创建StringBuilder对象 StringBuilder sb = new StringBuilder(string); //调用reverse()方法,将遍历的数字进行反转,然后用equals()方法对比是否与原数字相同 if (sb.reverse().toString().equals(string)) { count++; System.out.println(string + "是对称的"); } } System.out.println("总数为" + count); } }