java课堂_动手动脑4
1、请运行以下示例代码StringPool.java,查看其输出结果。如何解释这样的输出结果?从中你能总结出什么?
答:在Java中,内容相同的字串常量(“Hello”)只保存一份以节约内存,所以s0,s1,s2实际上引用的是同一个对
象。编译器在编译s2一句时,会去掉“+”号,直接把两个字串连接起来得一个字串(“Hello”)。这种优化工作由Java
编译器自动完成。当直接使用new关键字创建字符串对象时,虽然值一致(都是“Hello”),但仍然是两个独立的对象。
请运行以下示例代码,查看其输出结果。如何解释这样的输出结果?从中你能总结出什么?
答:给字串变量赋值意味着:两个变量(s1,s2)现在引用同一个字符串对象“a”!
String对象的内容是只读的,使用“+”修改s1变量的值,实际上是得到了一个新的字符串对象,
其内容为“ab”,它与原先s1所引用的对象”a”无关,所以,s1==s2返回false;代码中的“ab
”字符串是一个常量,它所引用的字符串与s1所引用的“ab”对象无关。String.equals()方法可以
比较两个字符串的内容。
2、请查看String.equals()方法的实现代码,注意学习其实现方法。
代码:
public class StringEquals {
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));
}
}
结果截图
分析:使用equals()或equalsIgnoreCase()方法比较两字串内容是否相同,使用==比较两字串变量是否引用同一
字串对象。而s1和s2分别用new所申请了各自的字串对象,所以系统输出false。
3、用法:
1)Length():获取字串长度
2)charAt():获取指定位置的字符
3)getChars():获取从指定位置起的子串复制到字符数组中(它有四个参数,在示例中有介绍);
4)replace():子串替换
5)toUpperCase()、 toLowerCase():大小写转换
6)trim():去除头尾空格:
7)toCharArray():将字符串对象转换为字符数组
解释
定义一个String类型的a,a.length()表示字串a的的长度;
用for(int i=0;i<a.length();i++)给a标号Atchar(i)表示a的第i个字符;
charArray = new char[ 5 ];
a.getChars( 0, 5, charArray, 0 );
//四个参数的含义
//1.被拷贝字符在字串中的起始位置
//2.被拷贝的最后一个字符在字串中的下标再加1
//3.目标字符数组
//4.拷贝的字符放在字符数组中的起始下标,
Repalace(a,b)用a替换b;
a.toUpperCase()\A.toLowerCase()分别是小写转大写,大写转小写;
a.Trim()即去掉字串a的头尾空格;
a.toCharArray()将字串a转化为字符数组。
public class Az
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
String a=" This is my original string ,it is very good! ";
String b="";
char a1[]=a.toCharArray();
for (int i=a.length()-1; i>=0; i--){
b += a1[i];
}
String c=a.toUpperCase();
System.out.println(b+"\n"+c);
String r = "your";
a = a.replace("my",r);
System.out.println(a.trim());
}
}
4、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 MyCounter
{
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);
}
}
结果:
课后作业一:字串加密
古罗马皇帝凯撒在打仗时曾经使用过以下方法加密军事情报:
请编写一个程序,使用上述算法加密或解密用户输入的英文字串要求设计思想、程序流程图、源代码、结果截图。
设计思想:输入要加密的子串str,定义字符串长度,将字符串转化为单个字符,每个字符+3,
向后移3个,定义output,将新得到的每个字符加到output后,最终将其输出,此字符串即为加密后的字符串。
程序流程图:
源代码:
import java.util.Scanner;
public class Saa
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
System.out.println("请输入字符");
Scanner in=new Scanner(System.in);
String key=in.nextLine();
int l=key.length();
char a;
System.out.println("加密后为:");
for(int i=0;i<=key.length()-1;i++)
{
a=key.(i);
if(a<(char) 'x')System.out.println((char)(a+3));
if(a==(char)'x')System.out.println('a');
if(a==(char)'y')System.out.println('b');
if(a==(char)'z')System.out.println('c');
}
}
}
结果截图:
java课堂_动手动脑4的更多相关文章
- JAVA课堂练习-动手动脑--数组
1.阅读并运行示例PassArray.java,观察并分析程序输出的结果,小结,然后与下页幻灯片所讲的内容进行对照. 源代码: public class PassArray { public stat ...
- JAVA 数组作业——动手动脑以及课后实验性问题
JAVA课后作业——动手动脑 一:阅读并运行示例PassArray.java,观察并分析程序输出的结果,小结,然后与下页幻灯片所讲的内容进行对照. 1.源代码 // PassArray.java // ...
- java第二节课 java语法基础动手动脑
动手动脑1:枚举变量 运行EnumTest.java package test2; public class EnumTest { public static void main(String[ ...
- java学习——关于java课件上动手动脑问题简单的分析
问题一:关于以下的代码为什么会产生错误的问题的简单分析. 第一个动手动脑提供了一下的代码,可以发现,在Foo的这个类中只定义了一个Foo(int)类型的构造函数,在之前的学习工程中,我们并没有接触到j ...
- java语法基础--动手动脑问题及课后实验问题
---恢复内容开始--- 动手动脑: 1:仔细阅读示例:EnumTest.java,运行它,分析运行结果 结果 :枚举类型是引用类型!枚举类型不属于原始数据类型,它的每个具体指都引用一个特定的对象.相 ...
- java学习(4)——动手动脑
根据ppt所给的例子,运行的结果如下所示: ppt中出现的第二个动手动脑如下: 代码如下: 其运行结果如下: 作出简单的分析如下:有点类似于if 和else的关系,总是对应try和catch同层中的异 ...
- java课程作业--动手动脑
随机数: 1)编写一个方法,使用以下算法生成指定数目(比如1000个)的随机整数. Modulus=231-1=int.MaxValue Multiplier=75=16807 C=0 当显示过231 ...
- 00JAVA语法基础_动手动脑
1.仔细阅读示例: EnumTest.java,运行它,分析运行结果? 枚举类型的使用是借助ENUM这样一个类,这个类是JAVA枚举类型的公共基本类.枚举目的就是要让某个变量的取值只能为若干固定值中的 ...
- java文件课后动手动脑
package 第九周作业1; import java.io.File; import java.io.FileInputStream; import java.io.IOException; imp ...
随机推荐
- zabbix报警信息设置
报警信息 默认标题: 服务器监控报警 告警主机:{HOST.NAME} 主机IP: {HOST.IP} 告警级别:{TRIGGER.SEVERITY} 告警信息:{TRIGGER.NAME} 问题详情 ...
- Python连载20-偏函数&zip函数&enumerate函数
一. 偏函数 二. #先举个例子 #把字符串转换为十进制数字 int(') #help(int),int函数中有一个参数base代表把它转换某个进制的数字 #把八进制的字符串转换为十进制 eight ...
- Java多线程(2)线程锁
多线程访问同一个资源进行读写操作,就很容易出一些问题(比如我们常见的读者写者,生产者消费者模型)所以我们会选择对他们设置信号量或者加锁,来限制同一个时刻只有一个线程对某个对象进行操作. 多线程是一个蛮 ...
- Hyperledger Fabric 命令整理
Peer节点命令 Peer node start 启动一个Peer节点: peer node start status 获取当前节点的状态信息 peer node status reset 重置当前节 ...
- 那些有实力进入 BAT 的本科生,都做对了什么事?
作者:黄小斜 文章来源:微信公众号[黄小斜] 最近这段时间,我们部门来了几个年纪轻轻的本科生,最小的比我们小五岁左,这对于我来说还是比较有冲击力的. 想想我也是九0出头的老腊肉了,想当年我上大学的时候 ...
- Oracle数据库常用的脚本命令(一)
--连接数据库的命令connect,用于切换连接用户,简写形式conn--语法格式:conn 用户名/密码conn yanln/yanln --显示当前登录的用户show user --执行操作系统的 ...
- linuxprobe培训第2节课笔记2019年7月6日
使用VM虚拟机配置RHEL实验环境. 鉴于在笔记本上装过centos7,这章内容难度对我来说不是很大. 重置root管理员密码(RHCSA考题,第一题,做不出来无法进行下一步考试) e linux16 ...
- nodejs进阶(1)——npm使用技巧和最佳实践
nodejs进阶教程,小白绕道!!! npm使用技巧和最佳实践 前提:请确保安装了node.js npm的最佳实践 npm install是最常见的npm cli命令,但是它还有更多能力!接下来你会了 ...
- JVM监控jconsole
1. 描述 程序在开发过程中,有可能会发生CPU飙高.内存溢出等问题或系统在后期调优阶段,不可避免的要监控JVM情况,JDK自带的Jconsole监控工具,结合Tomcat使用非常方便,占用内存小 ...
- Centos7.4 的yum源库配置。
http://mirrors.163.com/.help/centos.html https://www.cnblogs.com/mchina/archive/2013/01/04/2842275.h ...