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——课后动手动脑的更多相关文章

  1. java第二次课件课后动手动脑习题整理总结(2019年9月23号)

    一.动手动脑 1 1.题目 2.程序源代码 package yang8; import java.util.Scanner; import java.util.Random; public class ...

  2. 11.8java课后动手动脑

    package 动手动脑; import javax.swing.*; class AboutException { public static void main(String[] a) { int ...

  3. java课堂第一次随机测试和课件课后动手动脑问题解决(2019-9-16 )

    一.课堂测试 1.课堂测试:花二十分钟写一个能自动生成30道小学四则运算题目的 “软件” 要求 (1)减法结果不能为负数 (2)乘法结果不得超过一百,除法结果必须为整数 (3)题目避免重复: (4)可 ...

  4. JAVA String作业——动手动脑以及课后实验性问题

    一:如何解释这样的输出结果?从中你能总结出什么?1.源码 //mao2015.10.20 //==的两个分辨 //对原始数据而言 //对引用类型变量 public class StringPool { ...

  5. 01-JAVA语言基础——课后动手动脑

    1.一个java类文件中真的只能有一个公有类吗? 请使用Eclipse或javac检测一下以下代码,有错吗? public class Test{    public static void main ...

  6. java文件课后动手动脑

    package 第九周作业1; import java.io.File; import java.io.FileInputStream; import java.io.IOException; imp ...

  7. 10.18号java课后动手动脑

    问题一结论:类如果提供了一个自定义的构造方法,将导致系统不再提供默认构造方法. 问题二结论:(1)程序运行的结果是100和300,field=200为类的初始化块,可以在类中使用“{”和“}”将语句包 ...

  8. java第三讲课后动手动脑及代码编写

    1. 类就是类型,对象就是这种类型的实例,也就是例子.类是抽象的东西,对象是某种类的实实在在的例子.例如:车是一个类,汽车,自行车就是他的对象. 对象的定义方法? (1)对象声明:类名 对象名: (2 ...

  9. java课后动手动脑作业

    public class Suiji { public long a=12345L;//定义long类型的a,b,c变量 public long c=12345L; public long m=456 ...

随机推荐

  1. SpringBoot 解决“不支持发行版本xx”的问题

    原因:很多地方都要配置jdk版本,某些地方配置的jdk版本不同.比如你要使用jdk8,某些地方配成了jdk7. 最常见配置错的地方:Ctrl+Shift+Alt+S 如果没问题,查看Project中的 ...

  2. scikit_learn (sklearn)库中NearestNeighbors(最近邻)函数的各参数说明

    NearestNeighbors(n_neighbors=5, radius=1.0, algorithm='auto', leaf_size=30, metric='minkowski', p=2, ...

  3. Lua生成比较理想的随机数的方法

    lua需要生成随机数的需求也是很常见的,为了生成看起来更随机的数字,我们需要注意以下几点 我们也需要给随机数设置随机数种子:math.randomseed(xx) lua对随机数种子也是有一定要求的: ...

  4. Ternsorflow 学习:000-在 Ubuntu 16.04 上安装并使用 TensorFlow_v1.14 (改)

    声明:本人已经对原文链接根据情况做出合理的改动. 本系列文章使用的是Tensorflow v1.14 引言 TensorFlow 是由谷歌构建的用于训练神经网络的开源机器学习软件.TensorFlow ...

  5. Rancher概述

    概述 What’s Rancher? Rancher是一套容器管理平台,它可以帮助组织在生产环境中轻松快捷的部署和管理容器. Rancher可以轻松地管理各种环境的Kubernetes,满足IT需求并 ...

  6. java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver java.sql.SQLException

    今天下午一直想用netbeans连接数据库,结果就是来来回回碰到这两个问题. 我还在想,连接数据库并不是一个什么困难的事情啊,我都按照教程上一步一步做的,代码什么的都感觉很好,怎么就找不到类呢,怎么就 ...

  7. maven知识结构笔记

    1.什么是maven Maven 翻译为"专家"."内行",是 Apache 下的一个纯 Java 开发的开源项目.基于项目对象模型(缩写:POM)概念,Mav ...

  8. VUE- 访问服务器端数据 axios

    VUE- 访问服务器端数据 axios 一,安装 npm install axios 二,在http.js中引入 import axios from 'axios'; 三,定义http request ...

  9. Django(七)模型:字段属性、字段选项(参数)

    一.模型类属性命名限制 参考:https://docs.djangoproject.com/zh-hans/3.0/topics/db/models/ 1)不能是python的保留关键字. 2)不允许 ...

  10. node重点 模块

    node模块 1.全局模块(对象)(像js中的window document) 定义:何时何地都可以访问,不需要引用 1.process.env 环境变量 计算机属性 高级系统设置 高级 环境变量 作 ...