String str1="ABC"; 和String str2 = new String("ABC"); 有什么区别。
String str1="ABC" 可能创建一个对象或者不创建对象,如果"ABC"这个字符串在java String池里不存在,会在java String池创建这个一个String对象("ABC").如果已经存在,str1直接reference to 这个String池里的对象。
String str2 = new String("ABC") 至少创建一个对象,也可能两个。因为用到new 关键字,会在heap创建一个 str2 的String 对象,它的value 是 "ABC".同时,如果"ABC"这个字符串在java String池里不存在,会在java String池创建这个一个String对象("ABC").
String 有一个intern() 方法,native,用来检测在String pool是否已经有这个String存在。
考虑下面的问题:
String str1 = new String("ABC");
String str2 = new String("ABC");
str1 == str2 的值是True 还是False呢? False.
String str3 = "ABC";
String str4 = "ABC";
String str5 = "A" + "BC";
str3 == str4 的值是True 还是False呢? True.
str3 == str5 的值是True 还是False呢? True.
在写代码的时候,一般不要 String str2 = new String("ABC");
String a = "ABC";
String b="AB";
String c=b+"C";
System.out.println(a==c); false
a和b都是字符串常量所以在编译期就被确定了!
而c中有个b是引用不是字符串常量所以不会在编译期确定。
而String是final的!所以在b+"c"的时候实际上是新创建了一个对象,然后在把新创建对象的引用传给c.
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/kkdelta/archive/2009/03/02/3948725.aspx
相关推荐
在Java编程语言中,String类型变量的赋值问题是一个重要的概念,主要涉及到对象引用和不可变性。这里我们将深入探讨这两个关键点。 首先,Java中的String类是不可变的,这意味着一旦创建了一个String对象,就不能...
Java 中 String 类型的变量可以通过两种方式进行赋值:直接赋值和 new 关键字赋值。了解这两种方式的区别对于 Java 开发者来说非常重要。 直接赋值 直接赋值是指使用赋值语句将字符串直接赋值给 String 变量。例如...
理解Java中的String不可变性和引用传递的概念非常重要,这有助于避免潜在的错误,提高程序的效率,并有助于理解内存管理。在实际编程中,如果需要频繁修改字符串,可以考虑使用`StringBuilder`或`StringBuffer`类,...
在Java编程语言中,`String`类型的变量有一些特殊的性质,这主要源于它的不可变性(immutability)。不可变性意味着一旦一个`String`对象被创建,它的内容就不能被修改。下面我们将深入探讨这个问题,并通过给出的...
使用 `new` 关键字创建 `String` 对象时,虽然语法上看起来类似直接赋值的方式,但实际上是在堆内存中创建了一个新的 `String` 对象: ```java String s1 = new String("abc"); ``` 这种方式创建的字符串不会存放在...
在这个场景中,我们关注的是如何使用DOM4J以String的形式读取XML内容,然后将String的值赋给XML中的特定节点,最后将更新后的内容写回XML文件。下面我们将详细探讨这一过程。 1. **解析XML到String** 要将XML文件...
- 直接赋值:`String userName = "Eric";` 这种方式创建的String对象是在常量池中,如果已有相同内容的字符串,那么会复用已存在的对象。 - 使用`new`关键字:`String userName = new String("Eric");` 这种方式会...
### Java中String类的知识 #### 一、String 类概述与创建方式 在Java语言中,`String`类是用于表示不可变字符序列的核心类之一。它代表了一个字符串对象,一旦被初始化后,其内容不能被改变。这被称为不可变性...
### Java中String类详解 #### 引言 在Java编程语言中,`String`类扮演着至关重要的角色,它用于表示字符序列。本文档旨在深入探讨`String`类的特性和功能,帮助开发者更好地理解和应用这一核心类。 #### String类...
Java 中的 String 类有很多特点和用途,本文将深入探讨 Java 中的 String 类。 一、String 类的本质 Java 中的 String 类是一个特殊的类,它是一个 immutable 类,也就是说,一旦创建了 String 对象,它的值就不能...
在Java中,某些特殊字符不能直接作为字符值赋给变量,如换行符(\n),制表符(\t)等。这些字符需要使用转义序列`\`来表示。例如: ```java char newline = '\n'; ``` 这里的`\n`是一个转义序列,代表换行。 3. *...
通过以上分析可以看出,在Java中理解和掌握String池的概念对于优化程序性能至关重要。正确使用字符串字面量、`new`关键字以及`intern()`方法可以帮助开发者更高效地管理和使用字符串资源。同时,需要注意的是,在...
- **直接赋值**:这种方式会在**字符串常量池**(String Pool)中查找或创建一个对应的`String`对象,并将变量指向该对象。字符串常量池是Java堆的一部分,专门用来存储字符串字面量。如果字符串常量池中已经存在...
本文将深入探讨两种常见的对象创建方式:使用`new`关键字创建对象和直接定义对象。这两种方法虽然最终都能创建类的实例,但它们在内存分配、作用域和生命周期等方面存在显著差异。 ### 1. `new`关键字创建对象 `...
在Java编程语言中,反射是一个非常强大的功能,它允许程序在运行时检查或“反映”自身,并直接操作内部属性(如类、方法和字段)。本文将深入探讨如何利用Java反射来访问并修改类的私有字段。 #### 反射的基本概念 ...
Java中String和StringBuffer的区别实例详解 Java中String和StringBuffer都是用来存储字符串的对象,但是它们之间有着很大的区别。下面我们来详细介绍Java中String和StringBuffer的区别实例详解。 首先,String是不...
"Java 中 Object 对象和 String 对象的解析" Java 中的 Object 对象和 String 对象是两个非常重要的概念。在 Java 中,每个对象都继承自 Object 对象,这意味着每个对象都拥有 Object 对象的方法和属性。String ...
在Java编程中,`java.lang.String`类是极为常见的基础数据类型之一,其重要性和应用范围不言而喻。为了更好地理解和使用String类,本文将从几个关键方面入手,探讨如何更加高效、合理地使用String对象。 #### 一、...