Java第二次作业

1. 本周学习总结

基本数据类型 -> 封装数据类型 -> 装箱拆箱 -> 数组类型 -> 动态数组类型

String类(不可变) -> StringBuilder的使用

2. 书面作业

2.1 String-关联jdk源代码

2.1.1 查看String对象的源代码(截图),分析String使用什么来存储字符串?



应该是一种被称为字符序列的东西吧

2.1.2分析其构造函数public String(char value[])的作用?

能够从字符数组常量中重构一个String对象

2.1.3阅读public String replace(char oldChar, char newChar)方法的代码,回答String的不可变性在该函数中如何体现?(重点)

可以一眼看出:当字符串一摸一样的时候就返回原来的,不一样就重新返回一个新的字符串,原来的字符串直接丢弃了,所以说String是不可变的

2.1.4简述String与字符数组的关系,使用字符数组就可以处理字符串,为什么还需要String呢?

有了更好的封装,就可以存储很多常用的操作,这样就不用写一遍又一遍的重复代码了

2.2 StringBuilder

2.2.1结合PTA -2(StringBuilder) ,说明为什么频繁修改字符串时,应该使用StringBuilder而不是String?

直接用String会因为不变性而衍生出很多String的副本,大量占用资源,使程序运行效率大幅降低

2.2.2阅读jdk文档,查询StringBuilder的append(char[] str)方法功能是什么?试分析StringBuilder内部使用什么来存放字符?调用StringBuilder的append(char[] str)方法时,是如何实现添加字符的操作?

在尾部追加字符数组,内部是使用字符序列

通过源码我发现,低层就是简单的申请空间+字符数组拼接

2.3 字符串与字符串池

2.3.1尝试使用字符串池的概念解释如下程序段输出结果,并回答这段代码创建了几个字符串对象:

String str1 ="hi", str2="hi"; String str3 = new String(str1) System.out.println(str1==str2);

两个对象,1和2完全一样,3是内容一样但是存储的地址不一样

2.3.2重点:对基本类型我们可以使用==比较两个值是否相等,对于引用类型(如String, Integer、数组等)为什么不能使用==比较?应该怎样比较他们的值是否相等呢?

因为封装类型只是存的值看起来一样,但其实内存地址是不一样的,所以当然不能用==比较,使用equals比较。

2.4 Wrapper(包装类)

2.4.1 Integer i = 100;//100是基本类型,i是引用类型,为什么可以将100赋值给i?Integer x = 100; int y = x+1;x++;这一串命令中包含了些什么操作?

因为Java有自动装箱自动拆箱操作,会将100直接封装然后赋给i。这些命令里都有自动拆装箱操作

2.4.2Java为什么有了基本数据类型,还需要其包装类呢?包装类能给我们带来什么好处呢?

和封装String一个目的,便于提供常用的方法,避免写重复的代码。

2.5 实验总结

2.5.1 结对编程实践

a. 没有人一起。。。

b. 以前一起打代码的时候,确实有1+1大于2的效果,两个人的思路可以相互弥补增加新的创意,也能相互汲取本身没学到的知识

2.5.2 PTA-1

  1. 注意next和nextLine的区别,还有就是在同一个输入流中,如果用next,如果\n没有被输出,就一定是滞留在流中算入下一次的取值,而使用nextLine就相当于next+getchar
  2. 利用直接输出ArrayList偷懒(滑稽)

2.5.3PTA-3

哎用Comparator偷一手懒,舒服的嘛,就不谈了。

static Comparator<String> sort = (o1, o2) -> {
        if (Integer.parseInt(o1.substring(6,14)) > Integer.parseInt(o2.substring(6,14)))
            return 1;
        else  return -1;
    };

然后这样使用:

Arrays.sort(input,sort);

如果降序就在sort函数多加一个参数-1就好啦。

2.5.4 PTA-4

一个ArrayList<ArrayList<String>>解决,输出的对齐其实\t就好了,不过既然老师让练%-7s那就用吧

2.5.5 PTA-8

现在还没发现我哪里错了。。。。很难受

3. 码云及PTA

3.1 码云

Emm。。这段时间并没有提交手上的代码。。。

3.2 截图Java基本语法PTA提交列表

3.3使用工具统计代码量

本周为我的第一次统计,但是之前有过一次测试

上次统计时间:2017-09-23 12:30:33

距离上次统计经过了:21小时40分钟30秒

周次 总代码量 新增代码量 总文件数 新增文件数
2 420 208 10 4

历史记录:

第2周增加的代码行数和文件数:420 10

posted @ 2017-09-23 20:53  三组组长-董明超  阅读(187)  评论(0编辑  收藏  举报