`
yuyiming1986
  • 浏览: 62103 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

String str = new String("abc")创建几个对象?

阅读更多
  1.在JVM中存在着一个字符串池,其中保存着很多的String对象,并且可以被共享,因此能提升性能。由于String类是final的,它的值创建后就不可改变,所以不需要担心共享会导致程序混乱.

  2.String var = "king"的执行过程:首先在字符串池中查找是否已经有"king"这样的一个对象,通过String类的equals()来判断;如果有,则不再创建新的对象,直接返回已存在对象的引用;如果不存在,则先创建这样的一个对象,然后将它加入到字符串池中,再将它的引用返回。这也说明了为什么String var1 = "king", String var2 = "king";再比较两者的引用对象(var1 == var2)时是相等的。


  3.而String str = new String("king");创建了两个对象,它的执行过程如下:首是"king",在字符串池中查找"king"对象,如果没有,则在字符串池中创建"king"对象,然后在堆上创建String()对象,将共享字符串池中的"king"(String对象引用的字符串"king"就在字符串池中,不需要在String对象的char[]数组中再保存一份),返回堆上String对象的引用。所以在字符串池中创建一个对象,在堆上创建一个对象,一共是创建了两个对象。


  4.只有使用""+""方式创建的String对象才会加入到字符串池当中, 对于所有包含new方式新创建的对象的"+"连接表达式,它所产生的对象都不会被加入到字符串池中。

  测试代码:

public static void main(String[] args) {

		String a = "a";
		String b = "b";
		String c = "ab";
		String d = "a" + "b";
		String e = a + b;
		

		System.out.println(c == d);
		System.out.println(c == e);
		
	}



  输出:
  true
  false
分享到:
评论

相关推荐

    java语言程序设计课后习题答案解析.doc

    答:首先创建一个字符串变量有两种方式: String str = new String<"abc">; String str = "abc"; 使用"= ="会因为创建的形式不同而产生不同的结果: String str1 = "abc"; String str2 = "abc"; System.out....

    完整版Java全套入门培训课件 Java基础 06-集合(共24页).pptx

    String str1 = new String(“abc”); 有什么区别 ? String类部分方法 char charAt(int index) int length() char[] toCharArray(); int indexOf(String str); boolean endsWith(String str); String[] split...

    通过查询数据库里的方法名称,来调用方法

    利用影射,通过查询数据库里的方法名称,来调用方法 SqlConnection conn = new ... asac.abc c = new asac.abc(); TextBox1.Text = c.abcd(dr); conn.Close(); // str1 = str1.Substring(0, str1.Length - 1);

    String对象的创建与比较

    可能创建一个对象,或者不创建对象(当创建一个对象时,如果栈上该值存在,那么会直接引用,否则会创建)。  String str1 = new String("ABC");  String str2 = new String("ABC");  System.out.println(str1 ...

    底层的技术-----反射技术

    通过new对象 String str = new String(“abc”); String不可变特性:长度、内容 Private final char value[]; 内容不是真的不可变,可以通过反射的技术进行修改 反射 reflect 类是用来描述一组对象 反射机制...

    java题目(试卷)和答案

     String str=new String("good");  char[]ch={'a','b','c'};  public static void main(String args[]){  Example ex=new Example();  ex.change(ex.str,ex.ch);  System.out.print(ex.str+" and ");  ...

    Java语言程序设计(第3版)第06章-字符串.pptx

    6.1.1 String对象的不变性 Java语言程序设计(第3版) 一旦创建一个String对象,就不能对其内容进行改变。 s Hello,world s.replace('o','A'); HellA,wArld s = s.substring(0,6).concat("Java"); Hello,Java s s....

    Java面向对象程序设计试题一.doc

    public class Example{ String str=new String("good"); char[]ch={'a','b','c'}; public static void main(String args[]){ Example ex=new Example(); ex.change(ex.str,ex.ch); System.out.print(ex.str+" and ...

    C#中List和数组之间转换的方法

    本文实例讲述了C#中List和数组之间转换的方法。分享给大家供大家参考。具体分析如下: 一、List转数组 (从List<string>转到string[]) ...string[] str={str,string,abc}; List<string> listS=new List<string>(st

    C#中截取字符串的的基本方法详解

    string str="123abc456"; int i=3; 1 取字符串的前i个字符 str=str.Substring(0,i); // orstr=str.Remove(i,str.Length-i); 2 去掉字符串的前i个字符: str=str.Remove(0,i); // or str=str.Substring(i); 3 从...

    C#中List〈string〉和string[]数组之间的相互转换

    System.String[] str={“str”,”string”,”abc”}; List<System> listS=new List(str);   2, 从List转到System.String[] List<System> listS=new List(); listS.Add(“str”); listS.Add(“hello”); System....

    超强JS(javascript)正则类第三版

    反回 对象 * ============================================== * GetTagName(str,new Array()[,0]);反回字符串* ============================================== * getElememtBy(string,name,...

    delphi通用函数单元一

    function StrLeft(Str: string; Len: Integer): string; {测试通过} {* 返回字符串左边的字符} function Spc(Len: Integer): string; {测试通过} {* 返回空格串} function Replace(Str,s1,s2:string;CaseSensitive...

    java字符串操作大全

     boolean regionMatches(boolean ignoreCase,int startIndex,String str2,int str2StartIndex,int numChars) 8、startsWith()和endsWith()  startsWith()方法决定是否以特定字符串开始,endWith()方法决定是否以...

    浅谈返回函数内部new分配的内存的引用

    string* str = new string(abc); return *str; } 非法的,为什么? 其实,不能说这是非法的,只能说这种u编程习惯很不好,这样很可能造成内存泄露。 后面还有个回复是这样的: struct a_s { int a; }; a_s* foo() {...

    类似javaeye代码高亮显示

    <body>Java代码 ... String str="abc"; System.out.println(in+str); //注释 } } </textarea> <script language="javascript"> dp.SyntaxHighlighter.HighlightAll('code'); </script> 部分代码

    一套java模拟试题

    三、写出下面程序的运行结果(10分) 1、 import java.io.*; public class abc { public static void ... AB( String str1 , String str2 ) { s1 = str1; s2 = str2; } public String toString( ) { return s1+s2;} }

    Java测试题2答案

    指出下列程序运行的结果 D public class Example{ String str=new String("good"); char[]ch={'a','b','c'};  public static void main(String args[]){  Example ex=new Example();  ex....

    超强JS(javascript)正则类

    */ //=================================// /* GetTagName(str,new Array(),0)*/ //=================================// /* getElememtById(string,id); */ //=================================//...

    Android面试

    1.String str = new String(“abc”) 创建了几个对象? Android 1:你是如何理解Android操作系统的。 2:是否熟悉framework层,如果熟悉,那就对framework做个简介。 3:是否熟悉多线程,如果熟悉,介绍下线程。 4:...

Global site tag (gtag.js) - Google Analytics