java ppt4

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);
System.out.println(s0==s2);
System.out.println(new String("Hello")==new String("Hello"));
}
}

 

s0==s1是因为两者公用同一个Hello地址,
s0==s2是因为"He"+"llo"与“Hello”为同一个地址,(new String("Hello")!=new String("Hello")是因为第二的是新new的地址不同。

运行下面这段代码:
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"));
    }

两个变量(s1,s2)现在引用同一个字符串对象“a”!所以在修改s1之前s1与s2是同一个对象所以输出结果为true。

String对象的内容是只读的,使用“+”修改s1变量的值,实际上是得到了一个新的字符串对象,其内容为“ab”,它与原先s1所引用的对象”a”无关,所以,s1==s2返回false;

代码中的“ab”字符串是一个常量,它所引用的字符串与s1所引用的“ab”对象无关,所以第三个值为false。

String.equals()方法可以比较两个字符串的内容。内容都为ab,所以返回值为true。

2、请查看String.equals()方法的实现代码,注意学习其实现方法

public boolean equals(Object anObject) {
          if (this == anObject) {
              return true;
          }
          if (anObject instanceof String) {
              String anotherString = (String) anObject;
              int n = value.length;
             if (n == anotherString.value.length) {
                  char v1[] = value;
                 char v2[] = anotherString.value;
                 int i = 0;
                 while (n-- != 0) {
                     if (v1[i] != v2[i])
                             return false;
                     i++;
                }
                 return true;
             }
        }
        return false;
   }

String类中的equals首先比较地址,如果是同一个对象的引用,对象相等,返回true。

若不是同一个对象,equals方法挨个比较两个字符串对象内的字符,只有完全相等才返回true,否则返回false。

3、古罗马皇帝凯撒在打仗时曾经使用过以下方法加密军事情报:

请编写一个程序,使用上述算法加密或解密用户输入的英文字串要求设计思想、程序流程图、源代码、结果截图。

(1)设计思想:加密一个英文的字符串,首先输入一个字符串,加密的情况下,前23个小写字母或大写字母,则将其加3。后3个小写字母或大写字母,则将其减23。在解密的情况下,前三个小写或者大写字母要加23,其他23个字母要减3。至于字符串中的每一个字母可以用charAt()函数来找到,判断为哪个字母可以用ASC码值实现。

import java.util.Scanner;
public class Caesar {
    public static void main( String args[] )
    {
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入您要执行的操作:1、解密2、加密");
        int n=scanner.nextInt();
        if(n==1)
        {
        System.out.print("请输入要加密的字符串:");
        String string=scanner.next();
        String result ="";
        char stringadd;
        for(int i=0;i<string.length();i++)
        {
            if(string.charAt(i)>64&&string.charAt(i)<88||string.charAt(i)>96&&string.charAt(i)<120)
            {stringadd=(char) (string.charAt(i)+3);}
            else if(string.charAt(i)>87&&string.charAt(i)<91||string.charAt(i)>119&&string.charAt(i)<123)
            {stringadd=(char) (string.charAt(i)-23);}
            else
            {
             System.out.print("输入错误请重新输入!");
             break;
            }
            result = result + stringadd;
        }
        System.out.print("加密结果为:"+result);
        }
        else if(n==2)
        {
            System.out.print("请输入要解密的字符串:");
            String string=scanner.next();
            String result="";
            char stringsub;
            for(int i=0;i<string.length();i++)
            {
                if(string.charAt(i)>67&&string.charAt(i)<91||string.charAt(i)>99&&string.charAt(i)<123)
                {stringsub=(char) (string.charAt(i)-3);}
                else if(string.charAt(i)>64&&string.charAt(i)<68||string.charAt(i)>96&&string.charAt(i)<100)
                {stringsub=(char) (string.charAt(i)+23);}
                else
                {System.out.print("输入错误请重新输入!");break;}
                result = result + stringsub;
            }
            System.out.print("解密结果为:"+result);
        }
        else
        { System.out.print("请输入1或2确认操作!");}
    }
}

4、整理String类的Length()、charAt()、 getChars()、replace()、 toUpperCase()、 toLowerCase()、trim()、toCharArray()使用说明。

Length():获取字串长度例如:

String str=abc;

str.Length()=3

charAt():获取指定位置的字符。 例如:str.charAt(0)检索字符串str中的第一个字符,str.charAt(str.length()-1)检索字符串str最后一个字符。

getChars():获取从指定位置起的子串复制到字符数组中,四个参数1、拷贝起始的位置,2、拷贝结束的位置,字符串数值3、目标字符串数组,4、为目标字符串数组的起始位置

例如:char[]s1={‘i’,’’, ’l’,’o’,’v’,’e’,’’,’m’,’e’,’!’};

String s2 = new String (“java!”);

s2.getChar(0,4,s1,7);

System.out.println(s1);

结果为:i love java!

replace():子串替换

通过String类的replace()方法,可以将原字符串中的某个字符替换为指定的字符,并得到一个新的字符串,该方法的具体定义如下:public String replace(char oldChar,char newChar)。

toUpperCase()、 toLowerCase():英文大小写转换

trim():去除头尾空格:

toCharArray():将字符串对象转换为字符数组

时间: 2024-10-04 00:41:37

java ppt4的相关文章

Java多线程学习(吐血超详细总结)

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 目录(?)[-] 一扩展javalangThread类 二实现javalangRunnable接口 三Thread和Runnable的区别 四线程状态转换 五线程调度 六常用函数说明 使用方式 为什么要用join方法 七常见线程名词解释 八线程同步 九线程数据传递 本文主要讲了java中多线程的使用方法.线程同步.线程数据传递.线程状态及相应的一些线程函数用法.概述等. 首先讲一下进程和线程

Java TM 已被阻止,因为它已过时需要更新的解决方法

公司的堡垒机需要通过浏览器登陆,且该堡垒机的网站需要Java的支持,最近通过浏览器登陆之后总是提示"java TM 已被阻止,因为它已过时需要更新的解决方法"导致登陆之后不能操作, 但是操作系统中确实已经安装了比较新的JDK,安装的JDK版本是jdk-7u67-windows-i586,因为太烦人,所以决定搞清楚报错的原因,一劳永逸,彻底解决这个问题 准备工作:安装JDK,安装版本jdk-7u67-windows-i586.exe,因为机器的Eclipse还依赖64位的JDK,所以另安

Java四种线程池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor

介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用.本文是基础篇,后面会分享下线程池一些高级功能. 1.new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? Java new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub } }).start(); 1 2 3 4 5 6 7 new Thread(new

由@NotNull 注解引出的关于Java空指针的控制(转)

Java 小技巧和在java应用避免NullPonintException的最佳方法 在java应用程序中,一个NullPonintException(空指针异常)是最好解决(问题)的方法.同时,空指针也是写健壮的顺畅运行的代码的关键.“预防好过治疗”这句话也同样适用于令人不爽的NullPonintException.通过应用防御性的编码技术和在遵守多个部分之间的约定,你可以再很大程度上避免NullPointException.下面的这些java小技巧可以最小化像!=null这种检查的代码.作为

Java注解(2)-注解处理器(运行时|RetentionPolicy.RUNTIME)

如果没有用来读取注解的工具,那注解将基本没有任何作用,它也不会比注释更有用.读取注解的工具叫作注解处理器.Java提供了两种方式来处理注解:第一种是利用运行时反射机制:另一种是使用Java提供的API来处理编译期的注解. 反射机制方式的注解处理器 仅当定义的注解的@Retention为RUNTIME时,才能够通过运行时的反射机制来处理注解.下面结合例子来说明这种方式的处理方法. Java中的反射API(如java.lang.Class.java.lang.reflect.Field等)都实现了接

jvm系列(一):java类的加载机制

java类的加载机制 原文:http://www.cnblogs.com/ityouknow/p/5603287.html 1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构.类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口. 类加载器并不需要等到某个

Java注解(1)-注解基础

注解(Annotation)是在JAVA5中开始引入的,它为在代码中添加信息提供了一种新的方式.注解在一定程度上把元数据与源代码文件结合在一起,正如许多成熟的框架(Spring)所做的那样.那么,注解到底可以做什么呢? 1.注解的作用. 提供用来完整地描述程序所需要的信息,如编译期校验程序信息. 生成描述符文件,或生成新类的定义. 减轻编写"样板"代码(配置文件)的负担,可以使用注解自动生成. 更加干净易读的代码. 编译期类型检查. 2.Java提供的注解 Java5内置了一些原生的注

异常笔记--java编程思想

开一个新的系列,主要记一些琐碎的重要的知识点,把书读薄才是目的...特点: 代码少,概念多... 1. 基本概念 异常是在当前环境下无法获得必要的信息来解决这个问题,所以就需要从当前环境跳出,就是抛出异常.抛出异常后发生的几件事: 1.在堆上创建异常对象. 2.当前的执行路径中止                                          3. 当前环境抛出异常对象的引用.                                         4. 异常处理机制接

Java自学序言

Java自学序言 亲爱的自己和各位读者朋友: 您们好! 这是作者本人自学Java编程开发的一系列文章,不具有一定的权威性,也算是自己一个人的学习笔记和总结,希望自己通过博客的形式将我自己的学习效率得到提高.如自学的稳重存在不足或错误的地方希望广大的博客朋友们多多指教.本人在此不胜感激! 学习Java是一件很痛苦的事儿,我自己要想不断的去挑战一下自己,把自己大学所学的Java知识能够巩固起来.不断的去改正自己开发中的不足之处.如何来学习Java?如何来更好的掌握Java开发语言?这些都是我们要不断