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)可定制( ...
随机推荐
- Andy - 又一款速度流畅的免费安卓 Android 模拟器 (支持手机无线控制电脑模拟器)
随着 Genymotion.BlueStacks 等电脑上的 Android 模拟器流行起来之后,似乎很多人都发现在电脑上运行使用安卓APP软件.畅玩手机游戏确实很有乐趣. 今天我们又发现了一款全新免 ...
- Linux下的Hello world
总算正式开始学习Linux了. 先从Hello world入手. 1. 查看当前目录 lenovo@ubuntu:~$ pwd /home/lenovo 2. 新建test目录 lenovo@ubun ...
- Tempter of the Bone
Description The doggie found a bone in an ancient maze, which fascinated him a lot. However, when he ...
- weboffice控件使用不能嵌入网页
var s = ""s += "<object id=WebOffice1 height=586 width='100%' style='LEFT: 0px; TO ...
- python 学习随笔
要求: 用户输入一个数,比如输入387. 需要把387打乱,然后将这三个数组合成最大数输出. 如果最大值和用户输入的等大,输出-1. 方法一: #!/user/bin/env python # _*_ ...
- iOS去除导航栏和tabbar的1px横线
1.在自己定义的导航栏中或者设计稿中经常需要去除导航栏的1px横线,主要是颜色太不协调了 去除之前的图片 要去除这1px的横线,首先应该知道它是什么,在Xcode的界面调试中可以看到,它其实是UIIm ...
- centos6安装svn1.9
增加svn的源,vi /etc/yum.repos.d/wandisco-svn.repo [WandiscoSVN] name=Wandisco SVN Repo baseurl=http://op ...
- 概率论与数理统计讲课PPT和往年期末试卷
讲课PPT 第17课:数理统计的基本概念 注 : 我会陆续把讲课PPT放上去,大家可以下载. 往年试卷及解答 往年期末试卷及解答 注 : 供同学们参考以备考.
- javascript 变量提前
1. 未声明变量时,结果是我们预期的结果,报错这个变量没有定义. (function() { // 报错:variable is not defined console.log(variable); ...
- 在Linux/Windows系统上编辑/etc/hosts文件
Linux ubuntu16 open the terminal, input the command: sudo -i gedit /etc/hosts file click enter key, ...