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 } }

在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()方法可以比较两个字符串的内容。

public class StringEquals {
/**
* @param args the command line arguments
*/
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));
}
}

结果

public class my {
public static void main(String[] args) {
MyCounter counter1=new MyCounter();
MyCounter counter2=counter1.increase().decrease().increase();
System.out.println(counter2.x);
}
} class MyCounter
{
public int x;
MyCounter(int a)
{
this.x=a;
}
MyCounter increase(int a)
{
this.x=this.x+a;
return this;
}
MyCounter decrease(int a)
{
this.x =this.x-a;
return this;
}
}

结果

五   String类的使用说明

 1、string.length() 求字符串的长度,返回值为字符串的长度。

 2、string.charAt() 取该字符串某个位置的字符,从0开始,例如string.charAt(0)就会返回该字符串的第一个字符。

 3、string.getChars() 将这个字符串中的字符复制到目标字符数组。

 4、string.replace() 将原string 中的元素或子串替换。返回替换后的string。

 5、string.toUpperCase() 将字符串string中字符变为大写。

 6、string.toLowerCase() 将字符串string中字符变为小写。

 7、string.trim() 去除字符串头的空格。

 8、string.toCharArray() 将字符串转换为字符数组。

六   equals方法

equals方法是属于根类Object的,**默认比较的是对象的地址值**。

在String中我们可以使用“==”比较地址值,所以再使用equals方法比较地址值意义不大,很多时候我们需要比较的是String具体的内容。

所以String类中就进行了equals方法覆写。String中覆写之后的equals方法比较的就是具体的内容是否相同。

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

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

设计思想:

先将用户输入的英文字串通过String类里的toCharArray()方法转换为字符数组,然后依次将数组里的元素都加上3,得出密文。需要做进一步处理的是,最后三个字母xyzXYZ加上3之后,应该再减去26。

流程图:

代码:

import java.util.Scanner;
public class jiami {
public static void main( String args[] ){ System.out.println("请输入字符:");
Scanner cs=new Scanner(System.in);
String string =cs.nextLine();
int n=string.length();
char c[]=string.toCharArray(); for(int i=;i<n;i++)
{
c[i]=(char)(c[i]+);
if((c[i]>&&c[i]<)||c[i]>)
{
c[i]=(char)(c[i]-);
}
} System.out.println("密文:");
String result="";
for(int i=;i<n;i++)
{
result+=c[i];
}
System.out.println(result); } }

结果

课堂动手动脑String的更多相关文章

  1. java课堂动手动脑及课后实验总结

      动手动脑一:枚举   输出结果: false false true SMALL MEDIUM LARGE 分析和总结用法 枚举类型的使用是借助ENUM这样一个类,这个类是JAVA枚举类型的公共基本 ...

  2. java语言课堂动手动脑

    1 运行 TestInherits.java 示例,观察输出,注意总结父类与子类之间构造方法的调用关系修改Parent构造方法的代码,显式调用GrandParent的另一个构造函数,注意这句调用代码是 ...

  3. java课堂动手动脑博客

    随机生成10个数,填充一个数组,然后用消息框显示数组内容,接着计算数组元素的和,将结果也显示在消息框中. 要求将设计思路.程序流程图.源程序代码.结果截图.编程总结等发表到博客园. (截止时间2015 ...

  4. JAVA课堂动手动脑实验--方法的重载定义,组合数的递归算法

    1. 请看以下代码,你发现了有什么特殊之处吗? 答:此程序中的两个方法虽然方法名一样,但是参数的数据类型不同: 这是方法的重载,方法的重载需要满足的条件: 1)方法名相同: 2)参数类型不同,参数个数 ...

  5. Java课堂 动手动脑6

    一.下列语句哪一个将引起编译错误?为什么?哪一个会引起运行时错误?为什么? m=d;d=m;d=(Dog)m;d=c;c=(Cat)m; 先进行自我判断, 1.代码: class Mammal{} c ...

  6. Java课堂 动手动脑5

    1.了解棋盘打印:利用二维数组输出一个15*15的棋盘,棋盘的原素为“+”,就是输出一个横纵都是15个“+”的二维数组,然后再以坐标形式输入棋子“●”,替换掉原来棋盘里的“+”.再编写代码. 电脑随机 ...

  7. java课堂 动手动脑3

    (1) 该函数没有赋初值再就是如果类提供一个自定义的构造方法,将导致系统不在提供默认的构造方法. (2) public class test { public static void main(Str ...

  8. java课堂 动手动脑2

    1.编写一个方法,使用以上算法生成指定数目(比如1000个)的随机整数 Modulus=231-1=int.MaxValue, Multiplier=75=16807. C=0 当显示过231-2个数 ...

  9. JAVA课堂-动手动脑1

    一.Enum:一般用来表示一组相同类型的常量.对这些属性用常量的好处是显而易见的,不仅可以保证单例,且比较时候可以用”==”来替换equals,枚举对象里面的值都必须是唯一的. 代码: public  ...

随机推荐

  1. iPhone8再MacOS上修改手机铃声

    1 选择下载好的mp3铃声文件,导入到itunes 2 将音乐改成AAA模式, 设置你的铃声时长 3 show in finder 找到文件,将mpr后缀修改成m4r,并删除掉mp3文件,将m4r文件 ...

  2. audio autoplay 是pause 不会停止播放

    $("#alarmWav").append( $('<audio id="alarmAudio" autoplay loop src="../j ...

  3. smartgit

    1.同步最新分支 2.smartgit ctrl+2 可以看到本地新增加的文件

  4. LabVIEW--好书推荐与分享

    LabVIEW宝典 此书可以作为工具书,配合LabVIEW的范例程序学习可以达到事半功倍的效果. 链接:https://pan.baidu.com/s/17jm6PznLyGW8rVQ_veaGCg ...

  5. 初学python之路-day01

    第一天学习python,先了解到了进制之间的转换关系. 如二进制与十进制的转换,如1111转成十进制为15,1111从左向右可看出2^3+2^2+2^1+2^0为8+4+2+1=15.记住前8位1的二 ...

  6. 十一.keepalived高可用服务实践部署

    期中集群架构-第十一章-keepalived高可用集群章节======================================================================0 ...

  7. HTML常用基础标签

    HTML常用基础标签 带有语义的标签 <em> </em> 强调 <strong> </strong> 比em强调级别高 <abbr> &l ...

  8. cc.Node 的坐标空间与ACTION的学习

    1.创建二维的向量坐标 //创建向量坐标方法一 let new_pos1 = new cc.Vec2(100, 100); //创建向量坐标方法二 let new_pos2 = cc.v2(200, ...

  9. 著名的3像素Bug(div+img,多出几像素)

    <div><img src="...."></div> 给img的css设置display: block;/*用来去除div下边莫名多出来的3p ...

  10. IO多路复用注解

    #!/usr/bin/env python# -*- coding:utf-8 -*- # 客户端import socket obj = socket.socket()obj.connect((&qu ...