`
scorpiomiracle
  • 浏览: 263753 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

关于String对象的创建

阅读更多
今天看了[浪曦]Java常见笔试、面试题目深度剖析的第一课,看了才知道只有这一课是免费公开的。那就先笔记下学到的东西吧。哎,觉得自己基础太薄弱了。

先说明几个知识点:
1.String 的机制是有一个 String pool,当在 String池中存在需要的字符串时,就不会创建一个新的,否则就会创建一个新的。
2.java将内存划分为 栈stack和 堆heap,堆主要用来存放创建的运行时数据,如对象等。栈主要用来放基本类型的数据或者对堆中对象的引用。
3.使用“类 实例”的方式,如 String s,只是创建了一个引用,就是地址的意思。
4.只要使用了new就一定会在 堆 中创建一个对象,是一个完完全全新的对象。
5.在java中,== 永远意味着是地址/引用的比较

String s = new String("abc");
//首先看String pool中是否有 "abc",如果没有,则在String pool中创建一个"abc"对象,并在堆上也创建一个"abc"对象,另外还创建一个指向堆上"abc"对象的引用。如果 String pool 中有,则不会在String pool中创建一个对象。注:下面的对于 String pool 都是一个道理

String s1 = "abc";
//创建一个指向在 String pool 中 "abc" 对象的引用

String s2 = new String("abc");
//在堆中创建一个完完全全新的对象"abc",并创建一个指向该对象的引用。

//故:
System.out.println(s == s1); //false
System.out.println(s == s2); //false
System.out.println(s1 == s2); //false

String s3 = "abc";
System.out.println(s1 == s3); //true


另外:
对于 + 操作符,如果连接的是两个字面常量值,则会直接在 String pool 上创建连接后的新字符串对象(如果有,则不创建)。
如果 + 两端有字符串对象,那么就会在 堆 上创建一个新的对象(注意是在堆上,不是String pool,所以肯定会有一个新的对象创建出来的)。
String hello = "hello";
String hel = "hel";
String lo = "lo";

System.out.println(hello == "hello"); //true
System.out.println(hello == hel + "lo"); //false



分享到:
评论

相关推荐

    String对象创建问题

    首先,我们来了解一下编译期的`String`对象创建,这通常与字符串字面量有关。在Java源代码中,当使用双引号定义一个字符串,例如`"hello"`,Java编译器会将这些字面量字符串存储在常量池中。这种方式创建的`String`...

    String创建对象

    在Java编程语言中,`String`类是使用极为频繁的一个类,主要用于处理文本字符串...以上就是关于`String`类创建对象的一些核心知识点。理解这些细节对于编写高效、无误的Java代码至关重要,也是面试中经常被问及的问题。

    String类创建对象问题

    ### String类创建对象问题 #### 一、String 类与常量池、字符串池的基本概念 在 Java 中,`String` 类并不属于八种基本数据类型之一,而是作为一个对象存在。这意味着 `String` 对象默认值为 `null`。尽管如此,`...

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

    ### 创建string对象过程的内存分配详解 #### 一、引言 在Java中,`String` 类是最常用的数据类型之一,用于表示不可变的字符序列。`String` 对象的创建涉及复杂的内存分配机制,特别是在Java虚拟机 (JVM) 的环境中...

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

    JAVA 面试题解惑系列之 String 对象创建机制 本文将深入探讨 JAVA 中 String 对象的创建机制,解答常见的面试题目,并探索 String 对象池的概念和机制。 一、String 对象的创建方式 在 JAVA 中,String 对象可以...

    java中Object对象String对象的解析.pdf

    使用字面值赋值方式创建的 String 对象会被存储在 String 池中, String 池是一个特殊的存储区域,用于存储字符串常量。使用 new 关键字创建的 String 对象则会被存储在堆中。 在比较 String 对象时,需要使用 ...

    String对象详解(附代码)

    对String创建几个对象代码详解,包括字符串相加,对象相加等等

    JNI处理hashmap,string等对象的操作

    对于String对象的处理,JNI提供了`NewStringUTF`函数来创建一个新的Java String对象,以及`GetStringUTFChars`和`ReleaseStringUTFChars`来获取和释放字符串的UTF-8表示。例如,你可能需要在本地代码中解析或修改...

    Java String对象的经典问题

    ### Java String对象的经典问题 #### 一、String 类与对象机制概述 在Java中,`String`类是一个非常重要的类,它提供了丰富的功能用于处理文本数据。`String`类是不可变的(immutable),这意味着一旦一个`String`...

    解析Java中的String对象的数据类型 字符串

    在Java中,如果我们使用字面值方式创建的String对象,它们是常量池中的字符串常量,如果我们使用new关键字创建的String对象,它们是运行时创建的新对象。例如,String s0="kvill";,String s1=new String("kvill");...

    c++中由类名(string)创建这个类对象(RTTI)

    工厂模式可以隐藏对象创建的复杂性,并提供更好的可扩展性。 ```cpp class ObjectFactory { public: static std::unique_ptr<Base> createObject(const std::string& className) { if (className == "Derived1...

    String对象的内存分析

    在处理大量字符串操作时,避免不必要的`String`对象创建可以显著提升程序性能。例如,使用`String`的`intern()`方法可以确保重复的字符串引用同一个常量池中的实例,从而减少内存占用。同时,合理使用`StringBuilder...

    String型的不可变性

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

    Java中的String对象是不可变的吗Java开发Jav

    首先,不可变性意味着一旦一个String对象被创建,它的值就不能再被修改。例如: ```java String str = "Hello"; str = str + " World"; // 这里创建了一个新的String对象,而不是修改原来的 ``` 在这个例子中,...

    Java中颜色的String和Color对象之间的互相转换

    Java 中颜色的 String 和 Color 对象之间的互相转换 在 Java 中,颜色的表示形式有多种,包括字符串形式和 Color 对象形式。这两种形式可以互相转换,本文将介绍 Java 中颜色的 String 和 Color 对象之间的互相转换...

    JavaScript String 对象参考手册

    JavaScript中的String对象是用于处理和操作字符串的基本工具。字符串在JavaScript中是一种不可变的数据类型,这意味着一旦创建,就不能更改其内容。尽管如此,String对象提供了丰富的内置方法来处理字符串的各种需求...

Global site tag (gtag.js) - Google Analytics