04-String——课后动手动脑
1.请运行以下示例代码StringPool.java,查看输出结果。如何解释这样的输出结果?从中你能总结出什么?
public class StringPool {
public static void main(String args[])
{
String s0="Hello";
String s1="Hello";
String s2="He"+"llo";
System.out.println(s0==s1);//true
System.out.println(s0==s2);//true
System.out.println(new String("Hello")==new String("Hello"));//false
}
}
程序运行结果:

结论:
1、在Java中,内容相同的字符常量只保存一份以节省内存,所以s0,s1,s2实际上引用的是同一个对象。
2、编译器在编译s2一句时,会去掉“+”号,直接把两个字串连接起来得一个字串。这种优化工作由Java编译器自动完成。
3、当直接使用new关键字创建字符串对象时,虽然值一致,但仍然是两个独立的对象。
再看……
public class Test {
public static void main(String[] args) {
String s1 = "a";
String s2 = s1;
System.out.println(s1 == s2);
s1 += "b";
System.out.println(s1 == s2);
System.out.println(s1 == "ab");
System.out.println(s1.equals("ab"));
}
}
程序运行结果:

为什么会有上述的输出结果?从中你又能总结出什么?
1、给字串变量赋值意味着:两个变量(s1,s2)现在引用同一个字符串对象。
2、String对象的内容是只读的,使用“+”修改s1变量的值,实际上是得到了一个新的字符串对象,其内容为“ab”,它与原先s1所引用的对象“a”
无关,所以s1==s2返回false;
3、代码中的“ab”字符串是一个常量,它所引用的字符串与s1所引用的“ab”对象无关。
4、String.equals()方法可以比较两个字符串的内容。
2、请查看String.equals()方法的实现代码,注意学习其实现方法。
String.equals()源代码:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
由代码可知,这个函数首先判断这两个对象是否引用同一个字符串对象,如果是直接比较是否相同,如果不是,则比较两个对象中的字符是否相等。而且比较的方式是比较单个字符。
3、整理String类的length()、charAt()、 getChars()、replace()、 toUpperCase()、 toLowerCase()、trim()、toCharArray()使用说明。
(1)、int length():返回字符串的长度。
例:
public class Test {
public static void main(String[] args) {
String s1 = new String("hello world!");
String s2 = new String("hello");
System.out.println("s1的长度为:"+s1.length());
System.out.println("s2的长度为:"+s2.length());
}
}
执行结果:

(2)、 char charAt(int index):取字符串中的某一个字符,其中的参数index值得是字符串中序数。字符串的序数从0开始到length()-1。
例:
public class Test {
public static void main(String[] args) {
String s1 = new String("hello world!");
System.out.println("排在s1的第7位的字符为:"+s1.charAt(6));
}
}
执行结果:

(3)、void getChars(int srcBegin, int srcEnd, char dst[], int dstBegin):将字符从字符串复制到目标字符数组。
srcBegin -- 字符串中要复制的第一个字符的索引。
srcEnd -- 字符串中要复制的最后一个字符之后的索引。
dst -- 目标数组。
dstBegin -- 目标数组中的起始偏移量。
- 无返回值,但会抛出IndexOutOfBoundsException异常
例:
public class Test {
public static void main(String[] args) {
String s1 = new String("hello world!");
char s2[] = new char[10];
s1.getChars(6, 12, s2, 0);
System.out.println(s2);
}
}
执行结果:

(4)、String replace(char oldChar,char newChar):将字符串中的所有oldChar替换成newChar
例:
public class Test {
public static void main(String[] args) {
String s1 = new String("hello world!");
String s2 = s1.replace('o','a');
System.out.println("修改之后的字符串为:"+s2);
}
}
执行结果:

(5)、String toUpperCase():全部字符变为大写,返回新字符串。
例:
public class Test {
public static void main(String[] args) {
String s1 = new String("hello world!");
System.out.println("修改之后的字符串为:"+s1.toUpperCase());
}
}
执行结果:

(6)、String toLowerCase():全部字符变为小写,返回新字符串。
例:
public class Test {
public static void main(String[] args) {
String s1 = new String("HELLO WORLD!");
System.out.println("修改之后的字符串为:"+s1.toLowerCase());
}
}
执行结果:

(7)、String trim():去掉字符串首尾的空格。
例:
public class Test {
public static void main(String[] args) {
String s1 = new String(" hello world! ");
System.out.println("修改之后的字符串为:"+s1.trim());
}
}
执行结果:

(8)、char [] toCharArray():将该String对象转换成char数组。
例:
public class Test {
public static void main(String[] args) {
String s1 = new String("hello world!");
char s2[] = new char[12];
s2 = s1.toCharArray();
for(int i = 0 ; i < 12 ; i ++){
System.out.print(s2[i]+" ");
}
}
}
执行结果:

04-String——课后动手动脑的更多相关文章
- java第二次课件课后动手动脑习题整理总结(2019年9月23号)
一.动手动脑 1 1.题目 2.程序源代码 package yang8; import java.util.Scanner; import java.util.Random; public class ...
- 11.8java课后动手动脑
package 动手动脑; import javax.swing.*; class AboutException { public static void main(String[] a) { int ...
- java课堂第一次随机测试和课件课后动手动脑问题解决(2019-9-16 )
一.课堂测试 1.课堂测试:花二十分钟写一个能自动生成30道小学四则运算题目的 “软件” 要求 (1)减法结果不能为负数 (2)乘法结果不得超过一百,除法结果必须为整数 (3)题目避免重复: (4)可 ...
- JAVA String作业——动手动脑以及课后实验性问题
一:如何解释这样的输出结果?从中你能总结出什么?1.源码 //mao2015.10.20 //==的两个分辨 //对原始数据而言 //对引用类型变量 public class StringPool { ...
- 01-JAVA语言基础——课后动手动脑
1.一个java类文件中真的只能有一个公有类吗? 请使用Eclipse或javac检测一下以下代码,有错吗? public class Test{ public static void main ...
- java文件课后动手动脑
package 第九周作业1; import java.io.File; import java.io.FileInputStream; import java.io.IOException; imp ...
- 10.18号java课后动手动脑
问题一结论:类如果提供了一个自定义的构造方法,将导致系统不再提供默认构造方法. 问题二结论:(1)程序运行的结果是100和300,field=200为类的初始化块,可以在类中使用“{”和“}”将语句包 ...
- java第三讲课后动手动脑及代码编写
1. 类就是类型,对象就是这种类型的实例,也就是例子.类是抽象的东西,对象是某种类的实实在在的例子.例如:车是一个类,汽车,自行车就是他的对象. 对象的定义方法? (1)对象声明:类名 对象名: (2 ...
- java课后动手动脑作业
public class Suiji { public long a=12345L;//定义long类型的a,b,c变量 public long c=12345L; public long m=456 ...
随机推荐
- Day2-M-Prime Ring Problem-HDU1016
A ring is compose of n circles as shown in diagram. Put natural number 1, 2, ..., n into each circle ...
- POJ - 1061 青蛙的约会 (扩展欧几里得求同余式)
题意:两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问清楚对 ...
- 查看 Secret【转】
可以通过 kubectl get secret 查看存在的 secret. 显示有两个数据条目,kubectl describe secret 查看条目的 Key: 如果还想查看 Value,可以用 ...
- nohup command 2>&1 & 的含义
nohup command 2>&1 &的含义: nohup:no hang up,意思是不挂断.表示永久执行命令,哪怕当前终端已经退出登录. 并且命令前面添加nohup之后,会 ...
- wpf和winform的区别
深入浅出WPF(7)——数据的绿色通道,Binding(上) 水之真谛关注6人评论28117人阅读2008-06-23 02:40:00 http://liuteimeng.blog.51cto.c ...
- 《动手学深度学习》系列笔记 —— 语言模型(n元语法、随机采样、连续采样)
目录 1. 语言模型 2. n元语法 3. 语言模型数据集 4. 时序数据的采样 4.1 随机采样 4.2 相邻采样 一段自然语言文本可以看作是一个离散时间序列,给定一个长度为\(T\)的词的序列\( ...
- 04.Delphi通过接口IInterface实现多重继承
IInterface表示申明了一些函数,自己本身没有实现部分,需要由继承它的类来实现函数 uSayHello代码如下 unit uSayHello; interface uses SysUtils, ...
- Scala 线性化规则和 super 操作
如果一个类有多个父类,且父类的有相同的函数 f,在子类和父类中调用 super.f 都是按从右到左的调用函数的顺序. 这个规则名为:Linearization Rules 如下的代码 trait Ba ...
- 0108 spring的申明式事务
背景 互联网的金融和电商行业,最关注数据库事务. 业务核心 说明 金融行业-金融产品金额 不允许发生错误 电商行业-商品交易金额,商品库存 不允许发生错误 面临的难点: 高并发下保证: 数据一致性,高 ...
- SpringBoot-属性直接注入
SpringBoot-属性直接注入 SpringBoot-属性直接注入 上面我们说到,如果公共的属性,我们可以使用Java类加载Properties文件,来达到复用的目的,在SpringBoot中,我 ...