05-String动手动脑问题及课后实验性问题总结
一.请运行以下实例代码StringPool.java,查看其输出结果。如何解释这样的输出结果?从中你能总结出什么?
(1)在Java中,内容相同的字符常量(“Hello”)只保存一份以节约内存,所以s0,s1,s2实际上引用的同一个对象。
(2)编译器在编译s2一句时,会去掉“+”号,直接把两个字符串连接起来得一个字符串(“Hello”)。这种优化工作由Java编译器自动完成。
(3)当直接使用new关键字创建字符串对象时,虽然值一致(都是“Hello”),但仍然是两个独立的对象。
再看......
为什么会有上述的输出结果?从中你又能总结出什么?
(1)给字符串变量赋值意味着:两个变量(s1,s2)现在引用同一个字符串对象“a”!
(2)String对象的内容是只读的,使用“+”修改s1变量的值,实际上是得到了一个新的字符串对象,其内容为“ab”,它与原先s1所引用的对象“a”无关,所以,s1==s2返回false;
(3)代码中的“ab”字符串是一个常量,它所引用的字符串与s1所引用的“ab”对象无关。
(4)String.equals()方法可以比较两个字符串的内容。
二.请查看String.equals()方法的实现代码,注意学习其实现方法。
public class StringEquals { /**
* @param args the command line arguments
*/ public static void main(String[] args) { String s1=new String("Hello"); String s2=new String("Hello"); System.out.println(s1==s2); System.out.println(s1.equals(s2)); String s3="Hello"; String s4="Hello"; System.out.println(s3==s4); System.out.println(s3.equals(s4)); } }
由此程序可得:因为一开始是使用new关键字创建字符串对象,虽然值一致(都是“Hello”),但仍然是两个独立的对象。使用“==”来判断两个对象,不仅对象的值要相等,而且对象的地址也要是同一个,所以第一个判断为错误;使用“a.equals(b)”来判断两个对象时,只需要判断两个对象的值是否相等即可,所以第二个结果为true;之后两个因为赋值时,给两个对象赋值为“Hello”,所以两个对象的值与地址都相等。都为true。
(1)在String类里面是这样重写equals()方法的实现的:用当前的这个字符串对象和指定的字符串对象比较,指定的字符串对象不能为空并且这个对象的字符序列和当前这个字符串对象的字符串序列一样,如果这些条件都满足,那么这两个字符串对象就是相等的。
(2)如果String缓冲池内不存在与其指定值相同的String对象,那么此时虚拟机将为此创建新的String对象,并存放在String缓冲池内;如果String缓冲池内存在与其指定值相同的String对象,那么此时虚拟机将不为此创建新的String对象,而直接返回已存在的String对象的引用。
三.动手动脑:String类的方法可以连续调用:
String str=“abc”;
String result=str.trim().toUpperCase().concat(“defg”);
请阅读JDK中的String类上述方法的源码,模仿其编程方式,编写一个MyCounter类,它的方法也支持上述的“级联”调用特性,其调用示例为:
MyCounter counter1=new MyCounter(1);
MyCounter counter2=counter1.increase(100).decrease(2).increase(3);
......
public class StringXunHuan { public static void main(String[] args) {
// TODO Auto-generated method stub
String str="abc";
String result=str.trim().toUpperCase().concat("defg");
System.out.println(result);
} }
class MyCounter
{
int data;
public void set(int d)
{
data=d;
}
public MyCounter increase(int i)
{
MyCounter a=new MyCounter();
a.data=data+i;
return a;
}
public MyCounter decrease(int d)
{
MyCounter a=new MyCounter();
a.data=data-d;
return a;
}
}
public class Counter { public static void main(String[] args) {
// TODO Auto-generated method stub
MyCounter counter1=new MyCounter();
MyCounter counter2=new MyCounter();
counter1.set(1);
counter2=counter1.increase(100).decrease(2).increase(3);
System.out.println(counter2.data);//注意此处不能写成counter2,否选择输出结果为哈希值
}
}
四.课后作业1:字串加密
古罗马皇帝凯撒在打仗时曾经使用过以下方法加密军事情报:
请编写一个程序,使用上述算法加密或解密用户输入的英文字串要求设计思想,程序流程图,源代码,结果截图。
1.程序设计思想:
(1)首先编写一个ZhuanHuan函数,在函数中运用charAt函数来读取各个字符,将非x,y,z的字母的ASCII码值都加上三,并输出改变后的字符;x,y,z便是用ASCII码减去23即可得到a,b,c。
(2)在主函数中调用此函数,输出结果即可。
2.程序流程图:
3.源代码:
import java.util.Scanner;
public class CodeString { public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("请输入英文字符串:");
Scanner sc= new Scanner(System.in);
String S=sc.next();
sc.close();
ZhuanHuan(S);
}
public static void ZhuanHuan(String a)
{
char code;
for(int i=0;i<a.length();i++)
{
if((a.charAt(i))<88)
code=(char)(a.charAt(i)+3);//注意:charAt的下标也是从0开始
else
code=(char)(a.charAt(i)-23);
System.out.print(code + " ");
}
}
}
4.结果截图:
五.课后作业之字串加密、动手动脑之String.equals()方法、整理String类的Length()、charAt()、 getChars()、replace()、 toUpperCase()、 toLowerCase()、trim()、toCharArray()使用说明、阅读笔记发表到博客园
1.String.equals()方法:比较的是两个字符串的内容,与之区分的是“==”(判断对象的值和地址)。
2.Length():获取字符串的长度。
3.charAt():获取指定位置的字符(其中下标从0开始)。
4. getChars():获取从指定位置起的子串复制到字符数组中。
5.replace():子串替换。
6.toUpperCase():全部字符变为大写,返回新字符串。
7. toLowerCase():全部字符变为小写,返回新字符串。
8.trim():去除头尾空格。
9.toCharArray():将字符串对象转换为字符数组。
05-String动手动脑问题及课后实验性问题总结的更多相关文章
- 02_java语法基础_课程动手动脑问题以及课后实验性问题及解答集锦
Answer: 动手动脑: 1:1.1--仔细阅读实例:EnumTest.java,运行它,分析运行结果? 1.2--你能得到什么结论?你掌握了枚举变量的基本用法了吗? answer:枚举类型是引用类 ...
- 03-方法ppt动手动脑问题及课后实验性问题总结
一.如何不使用static来进行调用函数? 1.自己定义的不需要都是static,但是要在主函数中调用就需要static了,因为main是静态 的,在类加载时就加载了.如果想用又不加可以吧自己写的方法 ...
- java异常处理动手动脑问题解决和课后总结
动手动脑 一.问题:请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识. 1.源代码 import javax.swing.*; cl ...
- java语法基础--动手动脑问题及课后实验问题
---恢复内容开始--- 动手动脑: 1:仔细阅读示例:EnumTest.java,运行它,分析运行结果 结果 :枚举类型是引用类型!枚举类型不属于原始数据类型,它的每个具体指都引用一个特定的对象.相 ...
- java课程课后作业05之动手动脑
一.使用Files. walkFileTree()找出指定文件夹下所有大于指定大小(比如1M)的文件 此代码没有使用walkfiletree,两者的差别在于walkfiletree在遍历文件的时候有一 ...
- java动手动脑和课后实验型问题String类型
1.请运行以下示例代码StringPool.java,查看其输出结果.如何解释这样的输出结果?从中你能总结出什么? true true false 总结: 使用new关键字创建字符串对象时, 每次申请 ...
- JAVA 数组作业——动手动脑以及课后实验性问题
JAVA课后作业——动手动脑 一:阅读并运行示例PassArray.java,观察并分析程序输出的结果,小结,然后与下页幻灯片所讲的内容进行对照. 1.源代码 // PassArray.java // ...
- JAVA语法基础作业——动手动脑以及课后实验性问题 (八)
一.动手动脑 运行AboutException.java示例,了解Java中实现异常处理的基础知识. 1)源代码 import javax.swing.*; class AboutException ...
- 2019-9-16 java上课知识整理总结(动手动脑,课后实验)
java上课知识整理总结(动手动脑,课后实验) 一,课堂测试 1,题目:课堂测试:像二柱子那样,花二十分钟写一个能自动生成30道小学四则运算题目的 “软件” 要求:(1)题目避免重复: (2)可定制( ...
随机推荐
- Windows Azure Storage 之 Retry Policy (用来处理短暂性错误-Transient Fault)
在使用Windows Azure Storage Service 的时候, 通常会遇到各种各样的问题. 例如网络连接不稳定,导致请求没有发出去.删除一个Blob Container 之后又立刻创建同名 ...
- 用python在linux下获取网卡地址
使用一个第三方库,名为psutil 代码如下: #!/usr/bin/python # -*- coding:utf-8 -*- import psutil def get_netcard(): ne ...
- 07-阻塞赋值与非阻塞赋值原理分析——小梅哥FPGA设计思想与验证方法视频教程配套文档
芯航线--普利斯队长精心奉献 实验目的:掌握阻塞赋值与非阻塞赋值的区别 实验平台:无 实验原理: 阻塞赋值,操作符为"=","阻塞"是指在进程语句( ...
- HashMap与ConcurrentHashMap的区别
从JDK1.2起,就有了HashMap,正如前一篇文章所说,HashMap不是线程安全的,因此多线程操作时需要格外小心. 在JDK1.5中,伟大的Doug Lea给我们带来了concurrent包,从 ...
- Mybatis select返回值为map时,选取表字段的两列作为key,value
项目需要从ibatis升级到MyBatis,dao中有一个方法返回Map类型,具体是查询语句查询两个字段,将结果列表字段A的值作为key字段B的值作为value存入Map中作为结果返回: ibatis ...
- js 方法封装实例
(function(){ if(windows.Mr_2_B){windows.Mr_2_B={};} function trim(txt){return txt.replace(/(^\s*|(\s ...
- HDU 1272 小希的迷宫 并查集
小希的迷宫 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- Bootstrap_列表组
一.基本列表组 列表组是Bootstrap框架新增的一个组件,可以用来制作列表清单.垂直导航等效果,也可以配合其他的组件制作出更漂亮的组件. <ul class="list-grou ...
- python之路3:
class set(object): """ set() -> new empty set object set(iterable) -> new set o ...
- [Python]实现简单决策树
基本思路: 通过香农熵来决定每一层使用哪一种标签做分类,分类后,通过多数表决法来决定该层两个节点的类别.每次消耗一个标签,所以一共需要递归"标签个数"层. # -*- coding ...