字符串可能是任何程序语言中都会出现的对象,java中创建并初始化一个String对象,最常见的方式有两种:
String str=new String("XXX");
String str="XXX";
二者看似相同,其实有很大的差别。
前者是java中标准的对象创建方式,其创建的对象将直接放置到堆中,每调用一次就会创建一个新的对象;后者则会在栈中创建一个对象引用变量str,然后 查看字符串池中是否存在"XXX",如果没有,则将"XXX"存放字符串池,并令引用变量str指向它;如果已经有"XXX",则直接令str指向它。这样充分利用 了栈的数据共享优点,当然也可能是一个陷阱,对象很有可能没有创建,只不过指向一个先前已经创建的对象;而new()方法则能保证每次都创建一个新的对 象。
下述代码展示了二者的不同:
Java代码
1. public class Main {
2.
3. /** *//**
4. * @param args the command line arguments
5. */
6. public static void main(String[] args) {
7. String strA = "abc";
8. String strB = "abc";
9. String strAA = new String("abc");
10. String strBB = new String("abc");
11. System.out.println(strA == strB);
12. System.out.println(strAA == strBB);
13. }
14. }
输出结果:
true
false
字符串限定是指String s = “abc”这种形式,也就是说String s1 = “abc”;
s 和 s1 都是指向同一个内存地址
String s = "abc";
这句是定义一个String变量s,jvm会先去字符串池中找有没有"abc",有的话就把s指向"abc",没有就会先在池中创建一个,再让s指向"abc"。
String s = new String("abc");
这句是先定义一个String变量s,然后在内存中分配新的空间"abc"再让s指向这个内存地址。
分享到:
相关推荐
String 对象的初始化是一种特殊的语法,Java 提供了简化的初始化方法,例如: String s = "abc"; 这与面向对象的标准语法不同,标准语法应该是: String s = new String("abc"); 但是,按照面向对象的标准语法,...
在Java开发中,JavaBean和JsonString是两种常见的数据表示形式。JavaBean是Java对象的一种规范,用于封装数据,而JsonString是一种轻量级的数据交换格式,常用于前后端交互。本篇将深入探讨JavaBean与JsonString之间...
第三种方法:使用Arrays.asList这种方式使用了java.util.Arrays的静态方法,写法上比之前的两种都更简洁,也没有构造匿名内部类的效率问题。但也有几点需要注意:Arrays.asList返回的是Arrays的静态内部类,不支持增...
本文将详细探讨Java成员初始化的两种不同情况,以及与之相关的基础知识。 首先,我们来看第一种情况:类内的变量初始化。当声明一个类的成员变量(即实例变量)时,即使你没有显式地为它们赋值,Java编译器会自动为...
根据不同的初始化方式,Java 提供了三种主要的数组初始化方法:动态初始化、静态初始化以及隐式初始化。 #### 二、动态初始化 动态初始化是在创建数组时由系统自动为数组中的元素赋以默认值。默认值取决于元素的...
初始化二维数组有以下两种方式: 1. **静态初始化**: 初始化时可以同时指定每行的元素。例如: ```java String[][] str2DArray = { {"Hello", "Java"}, {"World", "Programming"} }; ``` 2. **动态初始...
创建`StringBuffer`对象主要有两种方式: - **无参数构造器**:`StringBuffer s = new StringBuffer();` 这将创建一个空的`StringBuffer`对象,初始容量通常是16个字符。 - **带参数构造器**:`StringBuffer s = ...
我们将通过两种方式来实现这个目标,分别是使用 Java 流读取 Word 内容和使用 Jacob 读取 Word 内容。 使用 Java 流读取 Word 内容 在第一个示例中,我们使用 Java 流来读取 Word 文档的内容。我们首先需要引入...
在Java编程中,将一个`List<Integer>`转换成以逗号分隔的`String`字符串是一种常见的需求,尤其是在处理数据展示或格式化输出时。Java 8引入了新的特性和方法,使得这种转换变得更加简洁和高效。下面我们将深入探讨...
初始化块可以分为两种:静态初始化块和非静态初始化块。 静态初始化块 静态初始化块使用static关键字定义,当类加载到系统时执行一次。静态初始化块只可以初始化类变量,即static修饰的数据成员。静态初始化块的...
学习大数据技术时,掌握Java基础,特别是数组的初始化方式是至关重要的。本篇文章将详细讲解Java中数组的三种初始化方法:静态初始化、动态初始化和默认初始化。 一、静态初始化 静态初始化是指在声明数组的同时为...
String的两种初始化方法是Java开发中的一大重要知识点。使用字面量初始化可以重用常量池中的字符串对象,而使用构造函数初始化总是创建一个新的字符串对象。理解这两种方法的实现过程对于Java开发人员来说是非常重要...
这两种类型的数组在内存中存储和管理的方式有所不同。 1. 基本类型数组 基本类型数组,如int、byte、char等,它们的元素直接存储在数组内部。当声明并初始化一个基本类型数组时,例如: ```java int[] a = {1, 3, 5...
成员变量的初始化分为两种情况:直接在声明时初始化(如`private String a = "hello";`)和在初始化块中初始化。直接初始化的变量会按照它们在代码中的顺序执行初始化。如果在初始化块中访问未初始化的变量(如`b`...
本文将深入探讨`log4j`的初始化过程,特别是两种常见的初始化方法——通过配置文件放置于不同目录下的初始化策略。 #### 第一种初始化方案:配置文件置于`/WEB-INF/`目录下 在Web应用中,将`log4j`配置文件置于`/...
初始化块也是对象初始化的一种方式,但它可以对 Java 对象进行更多的初始化操作。 在 Java 中,初始化块的语法格式如下: [修饰符]{ // 初始化块的可执行代码 ... } 其中,修饰符只能是 static,使用 static ...
Java中主要有两种方式来创建字符串: 1. **使用字符串常量直接初始化**: ```java String s = "hello!"; ``` 这种方式简单直接,适合于创建只读的字符串。 2. **使用构造方法创建并初始化**: - **创建一个空...
本文将详细解析Spring Boot中常见的几种资源初始化方式及其源码实现。 1. **`@PostConstruct` 注解** 当我们需要在bean初始化后执行特定的代码时,可以使用`@PostConstruct`注解。这个注解标记的方法会在bean实例...
尽管代码片段中没有显示具体的转换方法实现,但我们可以推测出以下两种可能的方法: 1. **转换为完整拼音**:该方法遍历输入的中文字符串,查找每个汉字在拼音表中的对应拼音,并返回完整的拼音串。 2. **转换为...