zoukankan      html  css  js  c++  java
  • java课堂_动手动脑4

    1、请运行以下示例代码StringPool.java,查看其输出结果。如何解释这样的输出结果?从中你能总结出什么?

     

    答:在Java中,内容相同的字串常量(“Hello”)只保存一份以节约内存,所以s0s1s2实际上引用的是同一个对

    象。编译器在编译s2一句时,会去掉“+”号,直接把两个字串连接起来得一个字串(“Hello”)。这种优化工作由Java

    编译器自动完成。当直接使用new关键字创建字符串对象时,虽然值一致(都是“Hello”),但仍然是两个独立的对象。

    请运行以下示例代码,查看其输出结果。如何解释这样的输出结果?从中你能总结出什么?

     

    答:给字串变量赋值意味着:两个变量(s1s2)现在引用同一个字符串对象“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()方法比较两字串内容是否相同,使用==比较两字串变量是否引用同一

    字串对象。而s1s2分别用new所申请了各自的字串对象,所以系统输出false

    3、用法:

    1Length():获取字串长度

    2charAt():获取指定位置的字符

    3getChars():获取从指定位置起的子串复制到字符数组中(它有四个参数,在示例中有介绍);

    4replace():子串替换

    5toUpperCase()toLowerCase():大小写转换

    6trim():去除头尾空格:

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

    解释

    定义一个String类型的aa.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+" "+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");

    请阅读JDKString类上述方法的源码,模仿其编程方式,编写一个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');

    }

    }

    }

    结果截图:

     

     
       
  • 相关阅读:
    银行卡号每隔4位插入空格
    IE6-8下自定义标签的表现
    Sql Server尝试读取或写入受保护的内存。这通常指示其他内存已损坏
    儿童编程教学scratch 3.0
    Shell 教程入门
    自定义vs2005代码段
    解决Adobe ReaderXI自动关闭问题
    WPF——给button添加背景图片
    WPF 异步加载数据
    Caliburn.Micro中的WindowManager
  • 原文地址:https://www.cnblogs.com/conquer-vv/p/6005980.html
Copyright © 2011-2022 走看看