java2

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

     ==:用于数值的比较,比较的是两个字符串的地址值
    equals()方法:用于内容的比较,比较两个字符串内容是否相等
public class Test {
public static void main(String[] args) {
String str1 = "hello";
String str2 = new String("hello");
String str3 = str2;
String str4 = "hello";
System.out.println("str1 == str2 --> " + (str1 == str2)); 
System.out.println("str1 == str3 --> " + (str1 == str3)); 
System.out.println("str2 == str3 --> " + (str2 == str3)); 
System.out.println("str1 == str4 --> " + (str1 == str4)); 
}
}

    结果
    str1 == str2 --> false
    str1 == str3 --> false
    str2 == str3 --> true
    str1 == str4 --> true
public class Test {
   public static void main(String[] args) {
String str1 = "hello";
String str2 = new String("hello");
String str3 = str2;
String str4 = "hello";
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))); 
System.out.println("str1 equals str4 --> " + (str1.equals(str4))); 
}
}
    结果
    str1 equals str2 --> true
    str1 equals str3 --> true
    str2 equals str3 --> true
    str1 equals str4 --> true

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

    和c的函数差不多,重载就和函数调用差不多,不可以,因为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");
        }
    }     
}
    不相等。因为数据精度位数虽然达到了14位,但有些浮点运算的结果精度并达不到这么高,可能准确的结果只有10~12位左右。低几位自然就是不可预料的数字了。所以,即使是理论上相同的值,由于是经过不同的运算过程得到的,他们在低几位有可能(一般来说都是)是不同的。
import java.math.BigDecimal;
public class 问题 {
    public static void main(String args[]) { 
        BigDecimal a = new BigDecimal("0.1"); 
        BigDecimal b = new BigDecimal("0.3"); 
        if(a.add(a.add(a)).compareTo(b)==0){
            System.out.println("等于0.3");
        }else {
            System.out.println("不等于0.3");
        }
    }     
}

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

    改为
public class 问题 {
    public static void main(String[] args) {
        MyClass arr=new MyClass();
        arr.value=100;
    }
}
class MyClass{
 	public int value=1;
}

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

    StringBuffer类因为String类表示的字符串是常量,一旦创建则内容和长度都不能改变。StringBuffer类表示字符容器,内容和长度可以随时修改。在操作字符串时,如果该字符串仅用于表示数据类型,则使用String类型,如果需要对字符串进行增删操作,则使用StringBuffer类。
public class Test {
     public static void main(String[] args){
        String str = "Hello";
        fun(str);
        System.out.println(str);         
    }
     public static void fun(String s){
     s.concat(" World");
     }
}

    结果Hello
public class Test {
     public static void main(String[] args){
        StringBuffer buf = new StringBuffer("Hello");
        fun(buf);
        System.out.println(buf);         
    }
     public static void fun(StringBuffer s){
     s.append(" World").append("!!!");
     }
}
    结果Hello World!!!

6.其他总结

    感觉身份证还是字符数组简单,就是难想点,但是复制很简单比字符串的复制快好多。

(三)代码托管

http://git.oschina.net/shuoge/java02

posted @ 2017-03-24 20:10  朔朔  阅读(221)  评论(1)    收藏  举报