欢迎光临,了解微信小程序开发,就上易用通!

【后端】java基础(2.4)java基本语法之字符与字符串

发布:2018-01-24 16:06浏览: 来源:网络 作者:tianshu

记得在Hello_Word那章的时候,我们用到了这样一句


  1. System.out.println("Hello_Word");

这个”Hello_Word”便是我们要讲的字符串。 字符串,顾名思义,就是就是把字符串起来,也就是多个字符的集合。要讲字符串,我们先来讲讲上章提到的字符。 Java用char类型来表示字母、数字、标点符号以及其他特殊字符,我们在java中表示字符串最简单的方法是用单引号嵌入字符,如:


  1. char c = 'a';

当然,单引号中也可以放入单个的汉字。 字符的本质其实是数字,因为每一个字符在Unicode标准中都有对应的数字值,称为Unicode值,比如小写的a是97


  1. char c = 97;
  2. System.out.println(c);

这段代码的运行结果就是小写的a

当然char还可以操作Unicode字符,因为不是很常用,所以在此也只是提供概念供查询,不做深入研究。

接下来是开始讲字符串了

  • 字符串的声明: 我们的字符串用String来进行声明,用单引号包裹,有两种方法,如:
    
    		
    1. String str1 = "你好!";
    2. String str2 = new String("你好!");
    我们在双引号中可以输入任何我们想要显示的东西,不限制长度,没有类型,可以是字母,数字,下划线,特殊符号,空格等等。 以上两种方式的区别以后会讲到。
  • 字符串的拼接: 当我们想把多个字符串拼接起来,组成一个新的字符串时,就需要用到字符串的拼接了,拼接的方法是用加号连接多个字符串:
    
    		
    1. String a = "Hello "+"word";
    2. System.out.println(a);
    我们还可以连接两个变量
    
    		
    1. String a = new String("Hello ");
    2. String b = new String("word");
    3. String c = a + b;
    4. System.out.println(c);
    当一个字符串和别的类型的变量拼接起来时,别的类型的变量会自动被强转成字符串,我们来看以下两段程序:
    
    		
    1. int a = 1;
    2. int b = 2;
    3. System.out.println(a+b);
    该程序的运行结果是毫无疑问是3,但是,如果这样:
    
    		
    1. int a = 1;
    2. int b = 2;
    3. System.out.println(""+a+b);
    程序的运行结果却是12,原来就是1和2被强转成了普通字符串然后被拼接到了一起。
  • 字符串的比较: 在上一章我们学了比较运算符,那么在java中我们如何比较两个字符串是否相等呢?用equals!,equals是String对象里面的一个方法。 我们来对比下equals和==的区别:
    
    		
    1. String str1 = new String("你好");
    2. String str2 = new String("你好");
    3. System.out.println(str1==str2);
    4. System.out.println(str1.equals(str2));
    这段代码运行的结果是false true,造成这个结果的原因是: 我们new了两个String对象,也就是开辟了两个不同的内存空间,==比较的是内存空间的位置是否相等,而euqals比较的则是内存空间里面放的东西是否相等,当然,上章所述的八大类型的比较都是比较内存空间的位置是否相等。
    
    		
    1. String str1 = "你好";
    2. String str2 = "你好";
    3. System.out.println(str1==str2);
    4. System.out.println(str1.equals(str2));
    而这段代码运行的结果是true true,造成这种结果的原因是:

这两个变量都是被当做基本类型来使用的,没有通过new关键字来创建的,因此虚拟机不会为这两个String对象分配新的内存堆,而是到String缓冲池中来寻找。首先为str1寻找String缓冲池内是否有与”你好”相同值的String对象存在,此时String缓冲池内是空的,没有相同值的String对象存在,所以虚拟机会在String缓冲池内创建此String对象,其动作就是new String(“你好”);。然后把此String对象的引用赋值给str1。然后为str2寻找String缓冲池内是否有与”你好”相同值的String对象存在,此时虚拟机找到了一个与其相同值的String对象,这个String对象其实就是为str1所创建的String对象。既然找到了一个相同值的对象,那么虚拟机就不在为此创建一个新的String对象,而是直接把存在的String对象的引用赋值给str2。因为str1和str2都引用了同一个内存对象,就是它自己等于自己,因此str1==str2的结果为true。 上述原理目前只需要了解即可,关于对象和指针,我们会在以后的章节陆续讲到。

  • 然后我们需要注意一点,如果两个String类型的值做比较的时候,尽量用已知的字符串去.equals变量,我们来看以下代码:
    
    		
    1. String str1 = null;
    2. System.out.println(str1.equals("你好"));
    这段话运行结果会抛出一个空指针异常,:
    
    		
    1. Exception in thread "main" java.lang.NullPointerException
    原因是str1已经是null了,也就是没有指向任何对象,既然没有对象,我们还要去找这个对象里面的方法,自然找不到,所以会抛出异常。 如果我们改成:
    
    		
    1. String str1 = null;
    2. System.out.println("你好".equals(str1));
    则会返回false




免责声明:本站所有文章和图片均来自用户分享和网络收集,文章和图片版权归原作者及原出处所有,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系网站客服处理。