本文实例总结了Java中的字符串用法。分享给大家供大家参考。具体分析如下:

字符串的本质是char类型的数组,但在java中,所有用双引号""声明的字符串都是一个String类的对象。这也正体现了Java完全面向对象的语言特点。

String 类

1、String类对象表示的是一个常量字符串。它是不可变长度的。也就是说,一旦创建了一个String类的实例,那么这个实例所表示的串是不可改变的。类似于

str = str + "Hello";

这样的操作,实质上是将 str 和 "Hello" 这两个String对象合起来创建了一个新的String对象,然后将新String对象的引用赋给了str。大量使用这种操作,就会造成性能上的缺陷。如果需要经常改变字符串的内容,应该使用StringBuffer类或StringBuilder类。我们可以用一段小程序来看看 String 和 StringBuffer类的性能差异到底有多大。

class StringTest

{

public static void main(String[] args)

{

/**

* 分别用String 对象和 StringBuffer 对象执行10,000次追加操作

* 测试执行时间

* 2013.3.18

*/

String constStr = "";

long lTime = System.currentTimeMillis();

for(int i = 0 ; i < 10000 ; ++i)

constStr += i;

System.out.println("Const String:"+(System.currentTimeMillis()-lTime));

StringBuilder strBuf = new StringBuilder("");

lTime = System.currentTimeMillis();

for(int i = 0 ; i < 10000 ; ++i)

strBuf.append(String.valueOf(i));

System.out.println("Buffered String:"+(System.currentTimeMillis()-lTime));

}

}

执行结果:

可以看到,StringBuilder秒过,而String类却要用300ms的时间,可见性能差异之巨大。

StringBuilder 和 StringBuffered都表示一个可变长度(mutable)的字符串对象,它们之间的区别在于,StringBuffered类会在线程同步方面做一些安全性处理,而StringBuilder则反之。所以如果只是在单线编程的话,StringBuilder要比StringBuffered效率稍高一些(其实区别也并不大)

2、"Hello World" 是一个String对象我们可以直接把"Hello World"当作一个对象来使用,如:

if("Hello".equals("Hello"))

System.out.println("Yes");

输出结果为Yes.

3、字符串对象比较要用equals()方法,而不能单纯地使用 == 来判断。因为 == 比较的是两个引用名称所引用的实例是否相同,equals()方法则比较的是两个对象中的字符串是否相等。

一个常见的问题是,下面的代码片断一共产生了几个String对象?

String str1 = new String("Hello");

String str2 = new String("Hello");

可能多数人会回答,2个。但事实上这里一共产生了3个String对象。除了str1 和str2,别忘了"Hello"也是一个String对象哦。

4、String池(Pool)

Java执行时会维护一个String池。当出现一个由双引号声明的字符串时,JVM会首先核查在内存中是否存在相同的String对象(字符相同),如果存在,则返回内存中已经存在的对象的引用 ,如果不存在才会创建一个新的String对象。这样可以节约内存。如下面一段代码,str1和str2实际上是指向的同一个String对象.

String str1 = "Hello";

String str2 = "Hello";

5、接收命令行参数

我们在声明main方法时,会声明一个String[] 类型的形参。这个String对象的数组就保存了用户在执行这个程序的时候所传递进来的命令行参数。注意,与C语言不同的是,Java里的命令行参数是从程序名称后第一个变量开始的。也就是说,String[]数据并不包括应用程序名。例如:

class strCmd

{

public static void main(String[] args)

{

if(args.length > 0)

{

for(String str : args)

System.out.println(str);

}

}

}

执行 java strCmd Hello World!时的输出结果为:

6、字符串的分离

类似于C语言中的strtok,String类也有一个split的方法可以以指定的格式分离一个字符串。split方法返回一个String对象的数组,表示分离出的每一段字符串。如:

class strSplit

{

public static void main(String[] args)

{

String str = "Hello\tWorld\tI\tLove\tYou!";

System.out.println("Original String : " + str);

String[] strArr = str.split("\t");

for(String s : strArr)

System.out.println(s);

}

}

其中,split()方法的参数可以是正则表达式。可以使用java.util包中的Matcher类的静态方法matches()来判断一个字符串是否符合正则表达式

String类还有更多其它强大的功能,我们应该学会阅读API文档。在这里就体现了英语的重要性了、、

希望本文所述对大家的java程序设计有所帮助。

java 字符串用法_Java中的字符串用法小结相关推荐

  1. indexof java 用法_java中indexof的用法

    indexOf()的用法,具体是什么意思?? indexOf()的意思:查找一个字符串中,第一次出现指定字符串的位置. indexOf()的用法: indexOf(int,ch) 先看第一个index ...

  2. java split函数的用法_java中split函数用法以及注意事项

    java中split函数用法以及注意事项 发布时间:2020-04-23 10:28:23 来源:亿速云 阅读:215 作者:小新 本篇文章和大家了解一下java中split函数用法以及注意事项.有一 ...

  3. java字符截取_java中截取字符串方法

    Java 简介 substring public String substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串.该子字符串始于指定索引处的字符,一直 ...

  4. java中replaceall用法_java中replaceall的用法

    JAVA中string.replace和string.replaceAll的区别及 替换方式不同 [public String replace( )] 是通过用 newChar 替换此字符串中出现的所 ...

  5. java中throws用法_java中throws实例用法详解

    在程序出现异常时,会有一个抛出异常的throw出现,这里我们要跟今天所讲的throws区分开.throws的作用是声明抛出,在名称上也跟throw有所不同.下面我们就throws对策概念.语法.实例带 ...

  6. java字符连接字符串数组_Java中连接字符串的最佳方法

    java字符连接字符串数组 最近有人问我这个问题–在Java中使用+运算符连接字符串是否对性能不利? 这让我开始思考Java中连接字符串的不同方法,以及它们如何相互对抗. 这些是我要研究的方法: 使用 ...

  7. java字符串转字符串列表_Java中的字符串列表示例

    java字符串转字符串列表 We have to read total number string i.e. "n", create a list of the Strings a ...

  8. java中的this的用法_java中this的用法

    This,英语单词,发音:[英][ðɪs][美][ðɪs].常翻译为:这,这么.java中this的用法有哪些呢?本文是学习啦小编整理java中this的用法的资料,仅供参考. java中this的用 ...

  9. java 字符串驻留_Java中的字符串驻留

    最近在工作的时候,一句再正常不过的代码String a = "hello" + "world";被改成了new StringBuilder().append(& ...

最新文章

  1. 转:delphi异常捕获try except语句 和 try finally语句用法
  2. org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 19
  3. 【响应式Web前端设计】CSS 定位详解
  4. spring中控制器和服务层校验的实现原理
  5. Ardino基础教程 9_数字电压表
  6. 网络协议——TCP/IP协议
  7. oracle ora 00283,【案例】Oracle报错ORA-16433非归档丢失redo无法启动的恢复过程
  8. ubuntu 安装 swoole 和mac 安装swoole 扩展
  9. linux命令执行的通过程,Linux下shell命令执行过程简介
  10. C#_基础,初始化器
  11. python commands执行不连续_[Python] 利用commands模块执行Linux shell命令
  12. 关于android的tabhost中进行参数传递的问题
  13. Spring源码分析-从@ComponentScan注解配置包扫描路径到IoC容器中的BeanDefinition,经历了什么(一)?
  14. 使用奇东锐腾PXE网克工具进行批量装机和系统恢复
  15. 疯狂夹娃娃机源码+教程
  16. ROSGazebo自定义多旋翼无人机仿真——环境搭建和模型建立
  17. python中如何判断大小写_用python如何判断字符的大小写
  18. C#中使用S7.net与西门子PLC通讯
  19. sja1000调试经验
  20. python 全排列 递归中的两种实现

热门文章

  1. 北京地铁新机场线列车亮相调试 设计时速160公里/小时
  2. Irreducible Sum of Rationals(C语言CodeWars)
  3. MySQL 1045登录失败解决方法
  4. oracle select @@identity,SQL区别@@IDENTITY,SCOPE_IDENTITY和IDENT_CURRENT
  5. Kotlin协程Channel中receive与send原理分析
  6. 网络收包流程-收包函数__netif_receive_skb的核心函数__netif_receive_skb_core(三)
  7. WinDbg调试CPU占用高的问题
  8. activiti6 任务委派
  9. Linux系统下Docker如何安装配置Nginx
  10. 深受程序员鄙视的外行语录