Java第二次作业——数组和String类

1.学习使用Eclipse关联jdk源代码,查看String类的equals()方法,截图,并学习其实现方法。举例说明equals方法和==的区别。



    基本数据类型“==”比较的是他们的值。
类,当他们用“==”进行比较的时候,比较的是他们在内存中的存放地址
equals: 只要2个字符串所包含的字符序列相同,通过equals()比较将返回true,2个引用类型的变量,并且必须它们指向同一个对象时,equals 才会返回true.


    public class Test{
public static void main(String[] args) {
    String str1="hello";
    String str2=new String("hello");
    String str3=str2;
        System.out.println("str1 equals str2-->"+(str1.equals(str2)));
        System.out.println("str1 equals str3-->"+(str1.equals(str3)));
        System.out.println("str2 equals str3-->"+(str2.equals(str3)));
}

}

public class Test{
public static void main(String[] args) {
    String str1="hello";
    String str2=new String("hello");
    String str3=str2;
        System.out.println("str1 == str2-->"+(str1 ==(str2)));
        System.out.println("str1 == str3-->"+(str1 == (str3)));
        System.out.println("str2 == str3-->"+(str2 == (str3)));
}

}
2.什么是构造方法?什么是构造方法的重载?下面的程序是否可以通过编译?为什么?

  (1)构造方法名与类名相同.
  (2)构造方法不返回任何值,也没有返回类型.
  (3)每个类可以有零个或多个构造方法.
  (4)构造方法在创建对象时自动执行,一般不能显式地直接调用.
 重载是编译时多态,即静态多态,根据不同类型函数编译时    会产生不同的名字如int_foo和char_foo等等,以此来区别调用。故重载    仍符合多态定义——通过单一标识支持不同特定行为的能力,只是重载属于    静态多态,而不是通过继承和虚函数实现的动态多态。

    public class Test {
        public static void main(String args[]) { 
           Foo obj = new Foo();       
        }     
    }
    class Foo{
        int value;
        public Foo(int intValue){
            value = intValue;
        }
    }
    Foo obj = new Foo();未赋初值

3.运行下列程序,结果是什么?查阅资料,分析为什么

public class Test {
    public static void main(String args[]) { 
        double a = 0.1;
        double b = 0.1;
        double c = 0.1;
        if((a + b + c) == 0.3){
            System.out.println("等于0.3");
        }else {
            System.out.println("不等于0.3");
        }
    }     
}

不等于0.3,精度损失,修改后的程序为

import java.math.BigDecimal;
public class Test {
    public static double add(double d1,double d2,double d3){
    	BigDecimal b1 = new BigDecimal(d1);
    	BigDecimal b2 = new BigDecimal(d2);
    	BigDecimal b3 = new BigDecimal(d3);
    	return b1.add(b2).add(b3).doubleValue();
    }
public static class BigDecimalDemo01{
	 public static void main(String[] args){
		System.out.println("加法运算:"+Test.round(Test.add(0.1,0.1, 0),0.1));
	}
	 
}
public static String round(double add, double d) {
	// TODO Auto-generated method stub
	return null;
}

}

4.运行下列程序,结果是什么?分析原因,应如何修改.

public class Test {
    public static void main(String[] args) {
        MyClass[] arr=new MyClass[3];
        arr[1].value=100;
    }
}
class MyClass{
    public int value=1;
}
没有正确初始化数组

 public class Test {
    public static void main(String[] args) {
        MyClass[] arr=new MyClass{new MyClass(),new MyClass(),new MyClass()};
        arr[1].value=100;
    }
}
class MyClass{
    public int value=1;
}

5.在一个10000次的循环中,需要进行字符串的连接操作,那么,应该使用String类还是StringBuffer类,为什么?性能有差异吗?能否写出测试代码证明你的结论。(可查阅资料)

1. 连接字符串的时候,如果有变量,StringBuffer效率会比String的效率高。
2. String改变的时候是改变的地址,而StringBuffer才是改变的值
应该用StringBuffer类

    StringBuffer

    String

程序思路:设置一个双重循环,外层循环是五个循环,内层循环是成绩,用Arrays.sort(sarr)这个工具类排序
遇到的问题:Arrays.sort(sarr)工具的使用问题和返回值问题
解决方法:百度和查阅资料
解题思路:if语句判断
遇到的问题:刚开始没有想到判断结尾是否是com|cn|net|gov|edu|org用||。

(三)[代码托管]
https://git.oschina.net/hebau_cs15/hebau-cs02HXD.git

  • 码云commit历史截图

posted @ 2017-03-28 22:30  柠檬冬冬  阅读(179)  评论(1编辑  收藏  举报