`
elvajxw
  • 浏览: 107780 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

String a = "abc"与String a = new String("abc")的区别

 
阅读更多
测试代码为:
       String str = "ab"; /*在常量池中看是否有ab这个值,要是有str就指向ab,如果没有就在常量池中创建ab,并且指向它*/
    String str1 = new String ("ab");/*这里"ab"本身就是常量池中的一个对象,而在运行时执行new String()时,将常量池中的对象复制一份放到堆中,并且把堆中的这个对象的引用交给s持有。所以这条语句就创建了2个String对象。。*/
String s1 = "a";
String s2 = "b";
String s = s1 + s2;/*因为s1,s2在编绎时无法知道确定的值所以在运行时才执行故在内存的堆中。
// 等价于 StringBuffer s = new StringBuffer();  
//       s.append(s1).append(s2);  
//     String s = s.toString();*/ String s3 = "a"+"b";/*在编译时就确定了s3=ab,所以s3指向常量池中的ab而不是指向堆。*/
System.out.println(s == str);//false
System.out.println(s.intern() == str); //true /*而当调用s.intern()方法,却可以返回s在常量池中的地址值*/
                     System.out.println(s == str1);//false//false
System.out.println(s.intern() == str1); //false
分享到:
评论
1 楼 菜鸟小光子 2012-08-06  
不知道你在讲什么~

相关推荐

    浅析为什么a=”abc” 不等于 a=new String(“abc”)

    b=new String("abc") typeof b // object a==b //true a===b //false 但是为什么呢?看了很多书,问了好几个大神,其实自己还是稀里糊涂的。这里记录一下,备查。 在js中,区分原始资料类型和包装类型。数字、字符串...

    String.txt

    String a="abc";//创建字符串方式1 String b =new String("abc"); //创建字符串方式2 System.out.println(a==b); //false,内存地址不相等 String c =new String("abc"); String d =new String...

    String中==与equals区别验证

    这里,`c` 引用了由 `new` 关键字创建的一个新 `String` 对象,尽管其内容与 `a` 和 `b` 相同,但 `a == c` 返回 `false`,因为它们指向不同的内存位置。然而,`a.equals(c)` 返回 `true`,因为它们的内容确实是相同...

    浅析为什么a="abc" 不等于 a=new String("abc")

    浅析为什么a="abc" 不等于 a=new String("abc") 在 JavaScript 中,很多开发者都遇到过一个问题:为什么 `a = "abc"` 不等于 `a = new String("abc")`?这是因为在 JavaScript 中,存在两种类型的字符串:原始类型...

    java String 使用详解

    String s = new String("abc"); 但是,按照面向对象的标准语法,在内存使用上存在比较大的浪费。例如: String s = new String("abc"); 实际上创建了两个 String 对象,一个是”abc”对象,存储在常量空间中,一...

    String类详解!

    理解`String`类的工作原理及其与其他类型的区别对于编写高效稳定的Java程序至关重要。 #### 二、String对象的初始化 1. **简化语法**:在Java中,通常可以通过以下两种方式来创建`String`对象。 - **简化语法**:...

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

    String s1 = new String("abc"); String s2 = new String("abc"); System.out.println(s1.equals(s2)); // 输出true,因为内容相同 ``` 当我们比较字符串时,通常应使用equals()方法,因为它能准确判断字符串的...

    String型的不可变性

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

    string中的常见问题

    本文将基于提供的代码片段深入探讨与 `String` 类型相关的几个关键概念,包括字符串常量池、字符串比较、以及 `new` 关键字在创建 `String` 对象时的影响。 #### 一、字符串常量池的理解 首先,我们需要理解字符串...

    String字符串比较1

    String s = new String("abc"); String s1 = "abc"; String s2 = new String("abc"); ``` 这里,`s`和`s2`都是在堆中创建的新对象,它们各自独立,与常量池中的"abc"对象不同。而`s1`直接引用了常量池中的"abc"对象...

    创建string对象过程的内存分配:

    使用 `new` 关键字创建 `String` 对象时,如 `String s = new String("abc");`,内存分配过程如下: - 首先,JVM 会检查 **常量池** 中是否已经存在一个等于 `"abc"` 的字符串对象。 - 如果不存在,则在 **常量池*...

    C#中String类常用方法汇总

    string str = "AbC"; string lowerStr = str.ToLower(); // "abc" string upperStr = str.ToUpper(); // "ABC" ``` 2. `.Trim()` `.Trim()` 方法用于移除字符串两端的空白字符,如空格、制表符等。 ```csharp...

    JAVA_String

    String s3 = new String("abc"); String s4 = new String("abc"); System.out.println(s3 == s4); // 输出false,因为s3和s4各自在堆中创建了对象 ``` 此外,`String`类还提供了`trim()`去除前导和尾部空格,`...

    equal与==区别

    String s3 = new String("abc"); String s4 = new String("abc"); System.out.println(s1 == s2); // true,因为s1和s2指向同一个内存地址 System.out.println(s1 == s3); // false,因为s1和s3虽然内容相同,但是...

    12基础篇之第十二(String的基本用法).docx

    2. 使用 `new String()` 关键字创建 `String` 对象时,会在堆中创建一个新对象,并且如果是通过字符串常量初始化,还会在常量池中创建一个相同的字符串对象。 3. 当比较两个由 `new String()` 创建的对象时,即使...

    第十五章字符串[定义].pdf

    例如,如果`String a="abc"`和`String b="abc"`,那么`a==b`和`a.equals(b)`都会返回`true`,但如果`String a="abc"`和`String b=new String("abc")`,`a==b`将返回`false`,因为它们指向不同的内存地址,而`a....

    String类的方法

    String s1 = s.replace('A', 'a'); // s1 的值为 "java" ``` 通过上述方法的学习和实践,我们可以更高效地处理字符串相关的任务。`String` 类提供了丰富的工具来帮助我们实现各种需求,如文本搜索、替换、比较等...

    String类创建对象问题

    - **使用 new 关键字**:如 `String str = new String("abc");` 这种方式创建的字符串对象则不在字符串池中,而是在堆内存中。每次使用 `new` 关键字都会创建一个新的对象,即使字符串的内容相同。 #### 三、实例...

    java面试题122道基础题

    String s=new String("abc"); System.out.println(s); String s1="abc"; String s2=new String("abc"); System.out.println(s==s1);//false System.out.println(s==s2);//false System.out.println(s1==s2);...

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

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

Global site tag (gtag.js) - Google Analytics