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("me " + a.i);//me 2
}
public String toString(){
System.out.print("I ");//I
return "java ";
}
}
运行结果是: I love java me 2
首先加载静态变量,然后执行main方法 由于main方法内部第一行的代码为输出语句 ,里面new了一个此类对象 ,当执行此类代码时会创建本类对象, 又因为重写了tostring方法 ,所以会先执行tostring方法打印输出,然后返回java ,在执行main函数的第一行打印语句 随后执行结束。
3.object 类中的equals方法
(1)
String s1 = new String("abc");
String s2 = "abc";
System.out.println(s1 == s2); //false
System.out.println(s1.equals(s2)); //true
首先在 栈 中开辟一个空间存放一个 s1 引用 ,然后在java方法区中的常量池里面开辟一块空间存放string类型的“abc”引用s1指向池中的abc ,s1存放的abc的地址。
第二段 首先在栈中开辟一个空间存放一个s2引用 。在java中 只要是new关键字来创建的对象,就一定会在堆里面创建一个新的对象,然后 在堆里面开辟空间创建一个新的new string 对象。这是一个新的对象 ,然后在堆中建立了一个对象abc 并放入到new string的对象里面 。此时第二段一共创建了两个对象 此时的s2指向的是new string 的堆地址。
(2)
String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2); //true
System.out.println(s1.equals(s2)); //true
在栈中开辟两个空间分别存放s1,s2 然后在java方法区中的常量池里面开辟一块空间存放string类型的“abc”引用s1指向池中的abc ,s1存放的abc的地址。s2 同样指向abc。所以 两个对象的内容相等 内存中的同一存储空间也一样
(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
两个变量相加相当于在堆中
new
了一个新对象 s1 是变量 ,“c”是常量
4.简述StringBuilder类与String类的区别。
string 类的对象不容易改变 ,所以每当进行字符串拼接的时候 总会在内存中创建一个新的对象,所以经常改变内容最好不要用string ,每次生成对象都会对系统的性能产生影响。
stringbuilder 称为可变字符序列 ,类似于string 字符串 缓冲区 通过 方法调用 可以改变序列的长度和内容。即它是一个容器 容器中可以装很多字符串,并且能够 对其中的字符串 进行各种操作。内部用一个数组来存放字符串的内容,进行字符串拼接时,直接在数组中添加洗的内容。stringbuilder 会自动维护数组扩容。
5.请用代码实现:获取当前的日期,并把这个日期转换为指定格式的字符串,如2088-08-08 08:08:08。
步骤: 先获取当前时间 ,然后用SimpleDateFormat 创建成指定的格式 然后盗用SimpleDateFormat 里面的format方法,返回字符串。
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);
}
}
6.使用SimpleDateFormat类,把2018-03-04转换为2018年03月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-03-04,得到对应日期类型
Date date = df1.parse("2018-03-04");
//创建日期格式化对象df2,在获取格式化对象时可以指定风格
DateFormat df2 = new SimpleDateFormat("yyyy年MM月dd日");
//调用df2的format(Date date) 传入刚才转换的日期
String str = df2.format(date);
System.out.println(str);
}
}
7.用程序判断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];
}
}
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]);
}
}
}