正确使用String类的几点注意

原创 2004年10月14日 17:44:00
  java.lang.String类对大家来说最熟悉不过了,我们写java程序很少能不用String的。本文讲述如何正确的使用String,内容主要涉及初始化、串联和比较等操作。

    首先我们必须清楚的一点是String类是final类型的,因此你不可以继承这个类、不能修改这个类。我们使用String的时候非常简单,通常都是String s = "hello",但是Java API中同时提供了一个构造函数为String(String s),因此你也可以这样使用String s = new String("hello"),对于后面这样初始化一个String的方式是不推荐的,因为new操作符意味着将会在heap上生成一个新的对象,如果这样的操作发生在一个循环中,那么代价是惨重的。比如
for(int i = 0;i<1000;i++)
{
    String s = new String("hello");
}
这将会创建1000个String类型的对象,由于String类是final的,因此这样的操作事实上是每次都生成了一个新的String对象的。如果你使用String s = "hello";那么就可以实现复用了,为什么可以复用呢,下面会有解释。

    当我们使用"+"实现串联操作的时候,比如String s = "hello"+"world";其实是通过StringBuffer类的append()方法实现的,最后返回String给s。如果有兴趣的话,你可以写一个简单的例子,然后用javap看看虚拟机是如何工作的。在使用串联的时候我们同样应该注意String是final类,如果你需要多次串联比如:
String sql = "xxx";
sql = "xxxx";
sql = "ssssss";
那么为了提高效率节省空间,我们应该自己用StringBuffer来替代"+";

    通常对String的比较有两种情况,一个是使用==,另一个是使用equals()方法,注意==是对对象的地址进行比较的,而String中的equals()方法是覆盖了Object类的方法,并且实现为对String对象的内容的比较。所以String s1 = new String("hello");String s2 = new String("hello"),我们对s1和s2进行上述比较的时候,前者应该返回false,因为使用new生成的是两个不同的对象。后者应该返回true因为他们的内容是一样的,都是"hello"。那么如果我们还有一个String s3 = "hello";他和s1的比较应该是什么样子的呢,答案是s1==s3为false,equals的比较位true。事实上String类是维持着一个String池的,这个池初始化为空的,当我们String x = "hello"的时候,hello就会被放入这个池中,当我们再次String y = "hello"的时候,他首先去检查池中是否存在一个和hello内容一样的对象,如果存在的话就会把这个引用返回给y,如果不存在的话,就会创建一个并放入到池中。这样就实现了复用。在String有一个方法intern()他可以把String的对象放入到池冲并返回池中的对象。如果我们对s1(String s1 = new String("hello"))调用intern,s1 = s1.intern()这时候,我们再把s1和s3进行“==”的判断,你会发现结果返回true!
看下面的例子

public class StringTest
{

    public static void main(String[] args)
    {
        String s1 = "hello";
        String s2 = new String("hello");
        String s3 = new String("hello");
       
        testString(s1,s2,s3);
        s2 = s2.intern();
        System.out.println("after s2.intern");
        testString(s1,s2,s3);
       
       

    }
   
    private static void testString(String s1,String s2,String s3)
    {
        System.out.println("s1 = s2 is "+(s1==s2));
        System.out.println("s2 = s3 is "+(s2==s3));
        System.out.println("s1.equals(s2) is "+s1.equals(s2));
        System.out.println("s2.equals(s3) is "+s2.equals(s3));
    }
}
输出结果为
s1 = s2 is false
s2 = s3 is false
s1.equals(s2) is true
s2.equals(s3) is true
after s2.intern
s1 = s2 is true
s2 = s3 is false
s1.equals(s2) is true
s2.equals(s3) is true

正确使用String类的几点注意

 java.lang.String类对大家来说最熟悉不过了,我们写java程序很少能不用String的。本文讲述如何正确的使用String,内容主要涉及初始化、串联和比较等操作。     首先我们必须...
  • ladofwind
  • ladofwind
  • 2004年12月09日 16:47
  • 752

正确使用String类应注意的几点

java.lang.String类对大家来说最熟悉不过了,我们写java程序很少能不用String的。本文讲述如何正确的使用String,内容主要涉及初始化、串联和比较等操作。 首先我们必须...
  • familyGo
  • familyGo
  • 2011年08月14日 23:02
  • 164

ASP.NET网站开发需要注意的几点知识(实用,不间断更新)

大家好,在做网站开发的过程中呢,遇到一些问题,在修改问题的时候,总结一下是非常必要的。一下就是我在开发过程中遇到的一些问题,和注意事项,希望大家一起学习和注意嘿嘿。大牛勿喷,(*^__^*) 嘻嘻。 ...
  • aaabbbwo
  • aaabbbwo
  • 2014年02月08日 15:58
  • 736

写UDP上传文件服务器时值得注意的几点

把一个文件拆成多个块上传机制的UDP服务器,需要注意的几点(即有文件位图,块位图的上传方式) 1、被动接收端(UDP服务器)的块管理器不要限制块个数,不要有达到了几个块后删除块的想法,不然客户端和服...
  • gzlyb
  • gzlyb
  • 2011年07月29日 16:26
  • 653

使用strcpy的注意事项

在日常工作中常常要进行字符串的复制工作,而strcpy是大家常用的字符串复制函数,现在要详细地说明这个函数可能带来的错误,并给我的使用心得。 首先,看看MSDN怎么说: strcpy      ...
  • stoneboy100200
  • stoneboy100200
  • 2012年09月07日 10:17
  • 2287

提交到App Store的注意事项

原创Blog,转载请注明出处 http://blog.csdn.net/hello_hwc?viewmode=list 我的stackoverflow 一次App 审核的周期从目前(201...
  • Hello_Hwc
  • Hello_Hwc
  • 2015年10月16日 10:13
  • 914

自学编程需要注意那几点

. 先培养兴趣 其实自学编程不是那么难,只要是理工科生、逻辑思维好点,最好英语也好点,基本都可以学会编程,但是很多人都失败了,原因就在于很多人还没入门就放弃了,看着一堆冰冷的英语字母、一...
  • GB15600279399
  • GB15600279399
  • 2017年12月15日 22:08
  • 161

大型票务系统自身特点所引入的安全性问题

一,大型票务系统中没有UGC(用户创造内容),因此这方面的安全性算不上重点,但是应分离票务系统和其他的UGC功能,例如旅客留言功能。 二,大型票务系统不会是WEB服务器直接访问数据库,而是WEB服务...
  • hu_zhenghui
  • hu_zhenghui
  • 2014年05月29日 22:03
  • 1874

String类的splite方法使用注意几点的地方

String splite()方法的使用注意点 博客分类: J2SE .在java.lang包中有String.split()方法,返回是一个数组  我在应用中用到一些,给大家总结一下,仅供大家参...
  • woshifeixingzhuiyue
  • woshifeixingzhuiyue
  • 2012年04月23日 18:58
  • 471

分析关于棋牌类游戏开发运营成功需要注意的几点

棋牌类游戏开发运营成功需要注意的几点
  • zhouyongku
  • zhouyongku
  • 2017年08月09日 23:25
  • 483
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:正确使用String类的几点注意
举报原因:
原因补充:

(最多只允许输入30个字)