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
- 注意next和nextLine的区别,还有就是在同一个输入流中,如果用next,如果\n没有被输出,就一定是滞留在流中算入下一次的取值,而使用nextLine就相当于next+getchar
- 利用直接输出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