Java中的字符串用法小结

 更新时间:2015年04月16日 15:13:18   作者:司青  
这篇文章主要介绍了Java中的字符串用法,实例总结了java中关于字符串操作的各种常用的技巧,非常具有实用价值,需要的朋友可以参考下

本文实例总结了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程序设计有所帮助。

相关文章

  • Spring boot 打jar包分离lib的正确配置方式

    Spring boot 打jar包分离lib的正确配置方式

    spring boot打jar包分离lib后,配置文件的方式,在网上可以搜到很多答案,但是都不够完善,今天小编给大家带来了Spring boot 打jar包分离lib的正确配置方式,感兴趣的朋友一起看看吧
    2018-02-02
  • 详解Mybatis-plus中更新date类型数据遇到的坑

    详解Mybatis-plus中更新date类型数据遇到的坑

    这篇文章主要介绍了详解Mybatis-plus中更新date类型数据遇到的坑,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • RocketMQ源码分析之Broker过期消息清理机制

    RocketMQ源码分析之Broker过期消息清理机制

    这篇文章主要为大家介绍了RocketMQ源码分析之Broker过期消息清理机制示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • 详解Java如何实现一个优秀的散列表

    详解Java如何实现一个优秀的散列表

    这篇文章主要通过简单的示例为大家详细介绍了在Java中如何实现一个优秀的散列表,文中的示例代码讲解详细,具有一定的参考价值,需要的可以了解一下
    2023-07-07
  • 简单聊一聊Spring中Bean别名的处理原理

    简单聊一聊Spring中Bean别名的处理原理

    今天来和小伙伴们聊一聊 Spring 中关于 Bean 别名的处理逻辑,别名,顾名思义就是给一个 Bean 去两个甚至多个名字,整体上来说,在 Spring 中,有两种不同的别名定义方式,感兴趣的小伙伴跟着小编一起来看看吧
    2023-09-09
  • SpringBoot整合Hibernate Validator实现参数验证功能

    SpringBoot整合Hibernate Validator实现参数验证功能

    这篇文章主要介绍了SpringBoot整合Hibernate Validator实现参数验证功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • Java Files和Paths的使用demo详解

    Java Files和Paths的使用demo详解

    Java Files和Paths是Java 7中引入的新API,用于处理文件和目录,Files类提供了许多有用的静态方法来操作文件和目录,而Path类则表示文件系统中的路径,这篇文章主要介绍了Java Files和Paths的使用详解,需要的朋友可以参考下
    2023-03-03
  • java并发请求下数据插入重复问题的解决方法

    java并发请求下数据插入重复问题的解决方法

    现在遇到一个项目,移动设备存储数据,然后一起上传,那就出现了许多重复数据,这篇文章主要给大家介绍了关于java并发请求下数据插入重复问题的解决方法,需要的朋友可以参考下
    2021-11-11
  • java基于控制台的学生学籍管理系统

    java基于控制台的学生学籍管理系统

    这篇文章主要为大家详细介绍了java基于控制台的学生学籍管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • 详解Java中LinkedHashMap

    详解Java中LinkedHashMap

    本文主要介绍了Java中LinkedHashMap的相关知识,具有很好的参考价值。下面跟着小编一起来看下吧
    2017-05-05

最新评论