一. 本周学习总结
- 引用类型变量存放指向对象的引用(类似于地址);
- == 与 equals 区别在于:==比较的是引用是否相等, 而equals则比较指向对象的内容是否相等;
- 因为String的不可变性,在要进行大量修改时用 StringBuilder更为高效;
- 在要表示空(不是0)时,可使用包装类来实现;
- 数组一旦确定大小就无法修改,若要实时修改则可用动态数组 ArrayList来实现。
二.书面作业
-
String-使用Eclipse关联jdk源代码
1.1 查看String对象的源代码(截图),分析String使用什么来存储字符串?
* 是用private final char value[]来存储字符串的。1.2 分析其构造函数public String(char value[])的作用?
* 使用java.utils包中的Arrays类来进行复制1.3 阅读public String replace(char oldChar, char newChar)方法的代码,回答String的不可变性在该函数中如何体现?(重点)
* 不是太能看懂,好像在用新的替换旧的时新建了数组buf,而不是直接在val上改1.4 简述String与字符数组的关系,使用字符数组就可以处理字符串,为什么还需要String呢?
- String封装了字符数组,并且自带大量的函数去操作字符串,会更加方便快捷。
-
StringBuilder
2.1 结合PTA -2(StringBuilder) ,说明为什么频繁修改字符串时,应该使用StringBuilder而不是String?- 如果使用String,在进行频繁修改时会在内存中产生大量的对象,耗时且占内存,而使用StringBuilder则只会产生一个对象,能在自身进行修改。就像PTA的第二题,如果用String来实现,就会因为内存超限而报错。
2.2 阅读jdk文档,查询StringBuilder的append(char[] str)方法功能是什么?试分析StringBuilder内部使用什么来存放字符?调用StringBuilder的append(char[] str)方法时,是如何实现添加字符的操作?
-
将 char 数组参数的字符串表示形式追加到此序列。
![]()
![]()
StringBuilder内部使用char[] value来存放字符。字符数组参数按顺序依次追加该序列的内容,序列的长度增加该参数的长度。
-
字符串与字符串池
3.1 尝试使用字符串池的概念解释如下程序段输出结果,并回答这段代码创建了几个字符串对象:
String str1 ="hi", str2="hi"; String str3 = new String(str1) System.out.println(str1==str2);- 进行
String str1 ="hi"时,会查看字符串常量池中是否有hi,有则直接用没有则生成一个。在进行Stringstr2="hi"时,因为常量池中有,则直接调用。运行String str3 = new String(str1)时,无论有没有都会创建一个新的。因为str1和str2指向同一个对象,因而返回true。
3.2 重点:对基本类型我们可以使用比较两个值是否相等,对于引用类型(如String, Integer、数组等)为什么不能使用比较?应该怎样比较他们的值是否相等呢?
- 因为 == 比较的是引用是否相等,而比较指向对象的内容是否相等则用 equals 。
- 进行
-
Wrapper(包装类)
4.1 Integer i = 100;//100是基本类型,i是引用类型,为什么可以将100赋值给i?Integer x = 100; int y = x+1;x++;这一串命令中包含了些什么操作?- 在运行
Integer i = 100;时,会将基本类型转换成Integer类型(自动装箱);Integer x = 100; int y = x+1;x++;命令会先自动装箱,然后再拆箱。
4.2 Java为什么有了基本数据类型,还需要其包装类呢?包装类能给我们带来什么好处呢?
- 在使用例如ArrayList之类时,无法将基本数据类型存入,此时就要借助包装类把基本类型变成对象类型,然后再存入。
- 在运行
-
实验总结
-
结对编程
结对队友:袁德兴
因为已经写完代码了,就讨论了一下身份证排序那题,我的方法很中规中举,德兴向我介绍了正则表达式的方法,感觉挺厉害的。两个人一起讨论想到的方法比较多,能学到自己不知道的东西。
- PTA-1综合小测验
之前的题都是一个函数敲到底,这题学到了调用函数,就像这样
private static void fib(int n)写完这个函数就可直接fib(n)调用了。 -
PTA-3身份证排序
- 在进行比较时,可用
substring()函数去取身份证的其中一段然后用compareTo()函数去比较其大小。 - 进行升序排列操作是利用冒泡算法进行的,若要改为降序排列只需修改冒泡算法的交换条件即可。若要按出生月份进行排列,只需在调用
substring()函数时只截取月份即可。
- 在进行比较时,可用
-
PTA-8 ArrayList入门
- 查看gdk文档可知各函数用法
![]()
- 数组一旦确定大小就无法修改,而动态数组 ArrayList 可实现实时修改。
- 查看gdk文档可知各函数用法
-
选做:5-5(浮点数计算)
因为double 型是不精确的,因而不可用,为了精确计算就可用到 BigDecimal ,计算就直接调用他的函数
add()和multiply()即可。
-
-
选做:公交卡里应该还有多少钱?请分析原因
这个卡里面的余额是一个 int 型的整数, 占 4个字节 范围是 2^32 次方4294967296是有符号的状态下,取值范围是 -2147483648 到 2147483648之间。在无符号的状态下,取值范围是 0 ~ 4294967296 之间。因为最小的单位考虑到是 分 ,即 0.01 元,所以对于人民币-21474836.48到21474836.48之间 符合设计要求。那么 欠费0.2 元 在有符号状态下是-20.在无符号状态下就溢出了,值是 4294967296 -20 = 4294967276即42949672.76元。综上所述,闸机显示按照无符号来理解显示的。计费系统按照有符号来理解计算的。
由上可知出错是由整数溢出导致的。
三.码云及PTA
-
码云代码提交记录
![]()
-
截图题集“Java基本语法”PTA提交列表
![]()
![]()
-
使用老师发的jar程序统计每周的代码量
![]()
![]()
周次 行数 新增行数 文件数 新增文件数 2 432 432 29 29








posted on
浙公网安备 33010602011771号