`
liuhun3083053
  • 浏览: 16974 次
社区版块
存档分类
最新评论

String创建对象

阅读更多

 

                        String 对象

1String str=new String("abc"); 创建了几个String对象 

 

栈(stack):

主要保存基本类型(或者叫内置类型)(charbyteshortintlongfloatdoubleboolean)和对象的引用,数据可以共享,速度仅次于寄存器(register),快于堆。

 

堆(heap):

用于存储对象。

 

字符串池:

JAVA虚拟机(JVM)中存在着一个字符串池,其中保存着很多String对象,并且可以被共享使用,因此它提高了效率。由于String类是final的,它的值一经创建就不可改变,因此我们不用担心String对象共享而带来程序的混乱。 

 

引用变量
String str只是定义了一个名为strString类型的变量,因此它并没有创建对象 

 

引号内包含文本 

创建String对象的方式有两种最基本的:一种new,另一种引号内包含文本。

  这种方式是String特有的,并且它与new的方式存在很大区别。

  String str="abc";

毫无疑问,这行代码创建了一个String对象。

所以不难看出上述例题创建了两个对象。实际上是"abc"本身就是文字池中的一个对象,在运行 new String()时,把文字池即pool中的字符串"abc"复制到堆中,并把这个对象的应用交给str,所以创建了两个String对象,一个在pool中,一个在堆中。 

 

2.String a="ab"+"cd"; 创建了几个对象?

 

三个(都在字符串池中)。"ab"  "cd"  "abcd"

这行代码被执行的时候,JAVA虚拟机首先在字符串池中查找是否已经存在了值为"ab","cd","abcd"的对象,它的判断依据是Stringequals(Object obj)方法的返回值。如果有,则不再创建新的对象,直接返回已存在对象的引用;如果没有,则先创建这个对象,然后把它加入到字符串池中,再将它的引用返回。 

 

3.String a="ab"; String b=a+"cd";创建了几个对象?

 

两个(都在字符串池中)。 "ab" "cd".

只有使用引号包含文本的方式创建的String对象之间使用+连接产生的新对象才会被加入字符串池中。对于所有包含new方式新建对象(包括null)的+连接表达式,它所产生的新对象都不会被加入字符串池中 

 

4.String a="ab"; String b=new String("ab"); System.out.println(a==b.intern());

 

True

当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(该对象由 equals()方法确定),则返回池中的字符串。否则,将此 String 对象添加到池中,并且返回此 String 对象的引用。 

 

 

0
1
分享到:
评论

相关推荐

    Java String创建对象实例解析

    Java String 创建对象实例解析 Java String 创建对象实例解析是 Java 语言中一个重要的概念,它涉及到字符串对象的创建、内存分配、垃圾回收等方面。在 Java 中,String 是一个特殊的类,它既是类也是对象。下面...

    String类创建对象问题

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

    String对象创建问题

    在Java编程语言中,`String`对象的创建是开发者经常遇到的问题,因为它涉及到内存管理和效率。`String`类在Java中被广泛使用,因为它代表不可变的字符序列,这使得它在很多场景下非常安全。这里我们将深入探讨`...

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

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

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

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

    String对象详解(附代码)

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

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

    总结来说,C++的RTTI机制提供了在运行时检查和转换类型的能力,但直接根据类名字符串创建对象通常需要借助设计模式(如工厂模式)或其他高级技术(如动态链接库和元类系统)。在实际开发中,合理利用这些工具可以...

    Java String对象的经典问题

    - **直接赋值**:这种方式会在**字符串常量池**(String Pool)中查找或创建一个对应的`String`对象,并将变量指向该对象。字符串常量池是Java堆的一部分,专门用来存储字符串字面量。如果字符串常量池中已经存在...

    java四种创建对象的方式

    Java中创建对象主要有四种显式的方式,分别是使用new关键字、反射机制、克隆克隆方法以及反序列化手段。每种方法都有其特定的使用场景和特点,以下是这些方法的详细说明: 1. 使用new关键字创建对象 这是最常见也是...

    String对象的内存分析

    本篇文章将深入探讨`String`对象的内存分析,包括栈、堆、常量池以及静态存储的概念,并通过具体的示例来解析不同情况下`String`对象的创建和内存分配。 首先,了解Java内存的基本结构。Java内存分为以下几个区域:...

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

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

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

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

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

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

    小心String的陷阱——深入剖析Java中String的处理机制

    `String Pool`是存储`String`字面量的缓存池,当通过字面量的方式创建`String`对象时,Java虚拟机首先检查`String Pool`中是否已经存在相同的字符串,如果存在,则返回该字符串的引用,而不是创建一个新的对象。...

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

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

    String型的不可变性

    第一种形式用 new() 来创建对象的,它会存放在堆中,每调用一次就会创建一个新的对象。第二种形式是先在栈中创建一个对 String 类的对象引用变量 str,然后查找栈中有没有存放"abc",如果没有,则将"abc"存放进栈,...

Global site tag (gtag.js) - Google Analytics