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