JavaSE练习一

 

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]);
	}
    }
}
发布了15 篇原创文章 · 获赞 5 · 访问量 4471

猜你喜欢

转载自blog.csdn.net/qq_37139773/article/details/100129996