当前位置:  技术问答>java相关

为什么string类不用new 呢?

    来源: 互联网  发布时间:2015-09-04

    本文导语:  字符串类不是java的基本数据类型,而是作为类用的,那么,我们在声明一个String对象时,为什么不用new()呢??  例如:String password="ok"; 这里为什么不这样呢?String password=new String("ok"); 有这方面的文档说明吗? ...

字符串类不是java的基本数据类型,而是作为类用的,那么,我们在声明一个String对象时,为什么不用new()呢??
 例如:String password="ok";
这里为什么不这样呢?String password=new String("ok");
有这方面的文档说明吗?

|
我来解释一下,String作为一个类来说,当然可以用new来构造,String有3个构造函数:

String();
String("xxx");
String(new StringBuffer());


这两条语句的效果是一样的

String password="ok";
String password=new String("ok");

不同的是,第一条现在内存中创建了"ok"这个String,然后将reference赋给password,如果这个时候还有一条语句String pwd = "ok";那么JVM将不再创建"ok",而是直接将第一个"ok"的reference赋给pwd,也就是说,password和pwd是使用同一块内存,而如果加上String pwd = new String("ok");那JVM将在内存中再创建一块区域放上“ok”这个字符串。

|
String password=new String("ok");
这样也没有错。
但是String password="ok";利用到了字符串缓冲池,也就是说如果缓冲池中已经存在了相同的字符串,就不会产生新的对象,而直接返回缓冲池中的字符串对象的引用。
如:
String a = "ok";
String b = "ok";
String c = new String("ok");
String d = new String("ok");

System.out.println(a==b);//将输出"true";因为两个变量指向同一个对象。
System.out.println(c==d);//将输出"flase";因为两个变量不指向同一个对象。虽然值相同,只有用c.equals(d)才能返回true.


所以实际中,建议用第一种,可以减少系统资源消耗。

    
 
 

您可能感兴趣的文章:

  • 请告知一下String s1 = "mm"; 与String s1 = new String("mm");的区别!
  • 请问“new String[]{(String ) ob}”怎么理解??
  • String s = new String() 和 String s= null;有什么区别?
  • 出错啊!?String str = new String(temp.getBytes("ISO8859-1"), "GBK");
  • 问个低级的问题:我从库里取汉字时候,代码如下:String ls=ob.test(i);String dbstr1= new String(ls.getBytes("ISO-8859-1"),"GBK");
  • String a="123"与String a=new String("123")出来的两个a,b之间有什么区别???
  • 在同一个程序里,string能不能反复new?
  • Long a1=new Long(First);First为String型,这句错在哪里?
  • 如何解决写入文件的汉字可以用文本打开不是乱码 new String(wstr.getBytes("ISO-8859-1"),"GB2312");
  • 这个构造函数new String(byte[],int,int,int)怎麽用?谢谢!
  • 汉字的问题:我用纯java把汉字从库里取出来显示,代码如下:String dbstr1= new String(ls.getBytes("ISO8859_1"),"gb2312"),可一部分字
  • 请问,我用String str2 = new String(rs.getString(2).getBytes("ISO8859_1"),"gb2312");为什么总抱错啊??
  • 如何在File file=new File(String fileName)中的文件名用类所在的目录下的相对文件名?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.lang类string的类成员方法: string定义及介绍
  • 已知a=1,b=2 String string="a+b";如何将string转化为表达式,并计算结果
  • C++ Bitsets 成员 to_string():返回bitset的字符串表示
  • 对String.indexOf(String str,int fromIndex);和lastIndexOf(String str, int fromIndex);的困惑!
  • java命名空间javax.xml.xpath类xpathconstants成员方法: string定义参考
  • c#中 String和string的区别介绍
  • java命名空间javax.management.openmbean类simpletype<t>的类成员方法: string定义及介绍
  • static String和String如何互相赋值?
  • java命名空间java.io接口objectstreamconstants的类成员方法: tc_string定义及介绍
  • 内容是String[]的Object用什么最简单办法转变回String[]
  • java命名空间javax.xml.ws.handler接口messagecontext成员方法: query_string定义参考
  • 请问String.equals()和String.equalsIgnoreCase()有什么区别啊?
  • C++ Strings(字符串) 成员 get_allocator():返回配置器
  • 问一个简单问题,String和String Buffer有什么区别?
  • C++ Strings(字符串) 成员 at():按给定索引值返回字符
  • 请问 int indexOf(String str)和 int lastIndexOf(String str)方法有什么区别?
  • C++ Strings(字符串) 成员 empty():如果字符串为空,返回真
  • " String ".trim()== "String"为什么是false?
  • C++ Strings(字符串) 成员 begin():返回一个迭代器,指向第一个字符
  • 一个String类型的Vector向量数组如何转换成一个String类型数组(请给代码)?
  • C++ Strings(字符串) 成员 data():返回内容的字符数组形式
  • 如何给String加回车,既给一个string赋多行值,立刻给分


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3