`

[转]String str1=new String("abc")到底创建了几个对象?

阅读更多
Stirng str1 = new String("abc");
//这个产生了2个对象,一个是new关键字创建的new Sring();另一个是“abc”对象,abc在一个字符串池中str1这个对象指向这个串池
String str2 = "abc"; //此处没有创建新的对象,故运行到此还是2个对象,首先没new,另外它会去看字符串池中有没有相同的字符,如果有则str2直接指向abc,如果不是abc,而是xyz的话则又创建了一个对象
Stirng str3 = new String("abc");//如果不看前面的,光看这一行本身也是创建了2个对象,但abc在字符串池里已经有了,所以结合前面的就创建了1个对象new Sring();
所以总共创建了3个对象
解释下字符串池:他是一个由字符组成的一个数组就相当于char str1 =new char[]{a,b,c};
如果不是遇到新的字符串,则直接指向原来的串池,如果遇到新的字符串则创建一个新的串池,个人以为因为java基本类型中中没有String类型,所以当出现新的字符串的时候需要以上面char 类型来创建一个数组对象。
分享到:
评论

相关推荐

    String类创建对象问题

    然而,`str1` 使用了 `new String("abc")` 的形式创建,这意味着它是在堆内存中创建的新对象,而非字符串池中的对象。同理,`str2` 由于包含了一个 `new String("bc")` 的部分,同样是在堆内存中创建的新对象。因此...

    String型的不可变性

    但是,如果我们使用 new 操作符来创建 String 对象,例如,String str1 = new String("abc"); String str2 = new String("abc"); System.out.println(str1 == str2); // false,这里 str1 和 str2 指向不同的对象。 ...

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

    String str1 = new String("abc"); String str2 = "abc"; System.out.println(str1==str2);//false String str1 = new String("abc"); String str2 = new String("abc"); System.out.println(str1==str2);//false ...

    Java String对象的经典问题

    因此,即使两个通过`new String()`创建的`String`对象具有相同的值,它们也会有不同的对象引用。 #### 三、String 比较 Java中有两种主要的方式来比较`String`对象: 1. **使用“==”运算符**:这种方法比较的是...

    string 的创建

    即使 `str2` 使用了 `"abc"` 作为构造参数,但由于是通过 `new` 关键字创建的新对象,所以与 `str1` 不是指向同一个对象。 #### 四、总结 通过以上的分析可以得出以下结论: 1. **直接赋值方式**:这种创建方式...

    java语言程序设计课后习题标准答案.doc

    String str = new String("abc"); ``` **1.2 字符串比较** - **使用`==`操作符**: - 当两个字符串通过字面量创建时,它们共享同一内存区域(字符串常量池),因此使用`==`比较时结果为`true`。 - 如果至少有...

    JAVA面试题解惑系列(二)——到底创建了几个String对象-JAVA程序员JAVA工程师面试必看.pdf,这是一份不错的文件

    1. 使用 new 关键字创建 String 对象 Java 代码:String str = new String("abc"); 这行代码创建了一个 String 对象,并将其引用赋值给 str 变量。 2. 使用引号包含的文本创建 String 对象 Java 代码:String ...

    Java中的堆和栈.pdf

    但是,如果使用`new`创建String对象,如`String str1 = new String("abc"); String str2 = new String("abc");`,则它们在堆中是独立的对象,`str1 == str2`会返回`false`。 在编写Java代码时,理解堆和栈的区别...

    Java String 字符串创建理解 equels和\"==\" 差异

    使用new关键字创建的字符串会在堆内存中创建一个新的对象,即使常量池中已有相同的字符串,也会生成新的实例。 3. **StringBuilder/StringBuffer**:`StringBuilder sb = new StringBuilder().append("Hello")....

    String类型两种不同实例化方式

    使用new创建String对象时,JVM不会去检查常量池中是否已有相同的字符串,而是直接在堆内存中创建一个新的String对象。这意味着即使两个使用new关键字创建的字符串内容完全相同,它们也是不同的对象,拥有不同的内存...

    java内存机制,分析堆和栈的存储特点.pdf

    ` 这种方式是在栈中创建一个引用变量`str1`,然后检查栈中是否存在"abc"的字符串常量,如果不存在,就在字符串常量池(属于堆的一部分)中创建"abc",并让`str1`指向它。如果已经存在,直接让`str1`引用已有的"abc...

    String对象的内存分析

    - `str1`和`str2`都指向常量池中的"凤山",所以`str1==str2`为`true`,只创建了一个对象。 - `str3`和`str4`分别通过`new String()`创建,它们在堆中,因此`str3==str4`为`false`,创建了三个对象。 - `i`和`j`都是...

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

    2. 使用`new`关键字创建新对象:`String str = new String("abc");` 当使用"=="来比较字符串时,它实际上是在检查两个字符串是否指向内存中的同一个引用,而不是比较它们的内容。这意味着,如果两个字符串变量都...

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

    string str = "select * from [KeyWord] where id='1'"; conn.Open(); SqlCommand cmd = new SqlCommand(str, conn); SqlDataReader dr = cmd.ExecuteReader(); // string str1 = ""; asac.abc c = new asac....

    Java程序设计基础:String类的常用方法(二.pptx

    - **解释**:`str1` 和 `str2` 因为是在同一个常量池中创建的,所以它们指向同一个对象,因此返回 `true`。而 `str3` 是通过 `new` 关键字创建的新对象,尽管内容相同,但不是同一个对象,所以返回 `false`。 ####...

    基于String变量的两种创建方式(详解)

    在这种方式下,Java虚拟机会在堆中创建一个存放"abc"的对象,使变量str02指向堆中的对象。 比较两种创建方式 从上面的示例中,我们可以看到,str01和str02都是String类型的变量,但是它们指向的地址不同。str01...

    C#中String类常用方法汇总

    string str1 = "abc"; string str2 = "ABC"; bool equals = str1.Equals(str2, StringComparison.OrdinalIgnoreCase); // true ``` 4. `.CompareTo(string value)` `.CompareTo` 方法用于比较当前字符串与另一...

    String对象的创建与比较

    在这个例子中,`str7`并不是对`str6`的引用,而是在运行时创建了一个新的`String`对象,其值为`"ABC"`。因此,`str7 == str3`返回`false`,因为它们引用的是堆中的不同对象。 最后,`String`对象的比较通常有两种...

    java 资料 equals 与== 的区别

    在上面的例子中,str1 和 str2 是两个字符串对象,== 运算符比较的是它们的内存地址,因为它们的内存地址不同,所以输出“对象 str1 和对象 str2 不是同一对象,他们的内存地址不相同”。 equals 方法 equals 方法...

Global site tag (gtag.js) - Google Analytics