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历史截图