A-A+

Java进阶学习之字符及字符串

2016年04月02日 Java 暂无评论 阅读 387 views 次

字符

Java用char类型来表示字母、数字、标点符号以及其它特殊字符。Java基于Unicode4.0来表示每一个字符,Unicode的设计目标是容纳世界上所有主要语言中的字符。

Java使用16位即2个字节来表示字符,这意味着Java可以表示216,即65536个字符,看起来很多,但是还不能支持整个Unicode标准中的所有字符。如果超过这个范围,Java允许使用int类型来表示字符,int类型字长4个字节32位,可以表示232,可以表示232个的字符。

Java中表示字符的最简单的方式如下,使用单引号嵌入字符:

  1. char capitalA = 'A';

字符从本质上讲是数字。每一个字符映射到一个范围在0到65525的正整数,每一个字符在Unicode标准中都有对应的数字值,成为Unicode值。我们可以用如下方法来查看字符的Unicode码:

  1. char word = 'A';
  2. int p = 65;
  3. System.out.println("a在unicode表中的顺序位置是:" + (int) word);
  4. System.out.println("unicode表中的第65位是:" + (char) p);

并不是所有的字符都可以通过键盘输入到计算机,也可以用Unicode转义符(\u或者\U,后面跟着四位的十六进制数字)来表示Unicode字符:

  1. char word = '\U0041'

特殊字符

字符串对象表示固定长度的字符序列,String类可能是Java程序中使用的最频繁的类了。

来看两种创建字符串的方式。

  1. String a = "abc";
  2. String b = new String("abc");

实际运用中,我们要避免第二种方式,第二种方式创建了两个String对象。首先,Java虚拟机创建了String对象“abc”。然后,Java虚拟机创建了一个新的String对象,并把字符串“abc”传入构造函数。这是一次完全没有必要的构造,既影响了性能,也提高了代码阅读难度。

由于字符串是字符序列,所以可以嵌入特殊字符。

  1. String s = "\t\n";

字符连接

可以将一个字符串和另外一个字符串连接起来,从而生成第三个字符串。

  1. String abcd = "ab".concat("cd");

在Java中,字符串连接是一个非常常用的操作,可以用加号(+)作为字符串连接的捷径。

  1. String abcd = "ab" + "cd";

在实际编码中,我们基本都是这么做的。

+符号既可以操作数值的加减,也可以用于连接字符串,这叫做操作符的重载。

字符串的不可改变性

在Java API文档中,可以看到String类的定义:

  1. public final class String extends Object implements Serializable, Comparable<String>, CharSequence

String类是一个final类,这代表一个String对象是补课改变的,String类的方法中我们也找不到任何能够个i阿扁字符串的值和长度的方法。这就是字符串的不可改变性。

当我们进行连接字符串操作的时候,Java虚拟机没有改变其中任何一个字符串,而是创建了一个新的String对象,把连接后的结果赋予了它。Sun将String设计成不可改的,这是为了让String的行为最优化。因为String在多数应用中都被大量使用,所以它的优化是非常关键的。

StringBuilder和StringBuffer

类java.lang.StringBuilder提供了动态创建字符串的能力。使用方法上与StringBuffer是一样的,不同之处在于,StringBuilder不是线程安全的,StringBuffer是线程安全的。

系统属性

在程序中,我们经常直接在字符串中写入特殊字符,比如换行符“\n”,这样做不近冗余,而且很难移植,不同平台的换行符也不同。

类java.lang.System中可以找到这个问题的解决方案,该类包含了方法getProperty,此方法以一个系统属性的键值作为参数,并返回与该键值相关的系统属性。Java虚拟机在启动的时候,就设置好了若干系统属性。多数属性返回与虚拟机以及当前执行环境相关的信息。API文档中针对getProperties方法,给出了可用的属性列表。例如换行符的属性是line.separator。

 

转自:http://www.cnblogs.com/zhuYears/archive/2012/02/06/2339574.html

给我留言

*

Copyright © If Coding 保留所有权利.   Theme  Ality   

用户登录