`
wss71104307
  • 浏览: 225364 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

String对象(一)

    博客分类:
  • Java
阅读更多

-------参考Java面试解惑:究竟创建了几个对象?

 

问题提出:

一.  String abc=new String("abc");究竟创建了几个String对象?(2

 

      把改式子分解为:

   1.    String abc    声明了一个变量,没产生新对象

   2.    =                 赋值操作,也没产生新对象

   3.   new String   新生成了一个对象

   4.    ''abc"           新生成了一个对象

   解释

    根据String类的构造函数:

public String(String original)
{
//other code
}

String abc=new String(“abc”);

实际等价于:

original=”abc”;然后把引用赋值给abc

根据jdk文档:

original=”abc”;

等价于

char data[] = {'a', 'b', 'c'};

     String original = new String(data);
   
编译器是如何操作的:

  (*)  JVM会先在Stack区中,创建三个char型值为'a', 'b', 'c',然后在Heap中创建一个对象original,它的值为刚刚Stack中刚刚三个char型组成的数组。

Stack区存放基本类型(即常量类型,intcharbooleanlongshortbytedoublefloat),特别速度快,可以共用 比寄存器速度稍慢,比Heap

Heap区存放对象

 

 

二.String abc=”abc”创建了几个对象 ? (1,根据问题一的分析)

 

三.  String abc=”abc”;

String abc1=”abc”;

创建了几个对象? (1)

 

JVM维护一个String Pool(字符串池),存放运行时产生的各种字符串,Pool中存放的字符串不重复。

String abc=”abc”代码被执行(编译)时,JVM首先在String Pool中查找是否有”abc”,如果没有,则参照(*)创建新对象,并把该对象加入到Pool中。

当执行String abc1=”abc”时,JVMString Pool中找到有”abc”,故直接返回其引用而不创建新的对象。

[上面的操作,使用的Stringpublic native String intern() 调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(该对象由 equals(Object) 方法确定),则返回池中的字符串。否则,将此 String 对象添加到池中,并且返回此 String 对象的引用。用代码来说明intern的用法

public class InternTest {
	public static void main(String args[])
	{
		String abcd=new String(new char[] {'a','b','c','d'});
		String abcd1=abcd.intern();//abcd用字符数组初始化的,
		                           //String Pool中没有"abcd"对象
		                           //创建新的对象

		if(abcd==abcd1)
			System.out.println("abcd1与abcd指向同一个对象");
		else
			System.out.println("abcd1与abcd不是指向同一个对象");
		
		
	    String abcd2=abcd1.intern();//String Pool中有"abcd" 不会创建新的对象
	    if(abcd2==abcd1)
			System.out.println("abcd1与abcd2指向同一个对象");
		else
			System.out.println("abcd1与abcd2不是指向同一个对象");
	    
	}

}

 输出结果为:

abcd1与abcd不是指向同一个对象
abcd1与abcd2指向同一个对象

 

 

 

 

分享到:
评论

相关推荐

    超全面javaweb教程28天-day3 01 js的string对象一

    超全面javaweb教程28天-day3_01_js的string对象一

    String对象常用的属性的方法

    ### String对象常用的属性与方法 在JavaScript中,`String`对象是用于表示和操作文本的强大工具。它提供了许多内置的方法来帮助我们处理字符串数据。本文将详细介绍`String`对象的一些常用属性和方法,并通过示例...

    js中string对象的使用

    此程序是向大家展示js脚本中string对象的基本应用

    string 对象 与json互转

    `org.json`库提供了一个名为`JSONObject`的类,可以将`String`转换为JSON对象。首先,确保你的项目中已添加了`org.json`的依赖,例如在Maven项目中添加以下依赖: ```xml <groupId>org.json <artifactId>json ...

    String对象创建问题

    在上述代码中,`s5`的值为`"hello world"`,但整个过程只创建了一个`StringBuilder`对象和最后的`String`对象。这比使用`+`运算符进行字符串拼接更高效,尤其是在循环中。 总的来说,理解`String`对象在编译期和...

    86.java中String对象的特点.zip

    86.java中String对象的特点.zip86.java中String对象的特点.zip86.java中String对象的特点.zip86.java中String对象的特点.zip86.java中String对象的特点.zip86.java中String对象的特点.zip86.java中String对象的特点....

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

    String 对象是 Java 中最常用的对象之一,它用于存储字符串类型的数据。 在 Java 中,Object 对象有一个非常重要的方法,即 equals() 方法。该方法用于比较两个对象是否相等。对于基本数据类型,equals() 方法比较...

    String创建对象

    // 转换为String对象 ``` 4. **intern() 方法**: `String`类的`intern()`方法用于获取常量池中的字符串引用。如果常量池中已存在该字符串,则返回其引用;否则,将字符串添加到常量池并返回引用。例如: ```...

    Prototype String对象 学习

    在JavaScript中,Prototype是一个库,它扩展了JavaScript的内置对象,包括String对象。这里的“Prototype String对象”是指Prototype库为JavaScript原生的String对象添加的一些额外功能,主要是为了增强字符串处理的...

    CString和string对象

    CString和string对象的相互转化问题 CString对象和string对象是两种不同的字符串类型,它们之间的转化是非常重要的。本文将详细介绍CString和string之间的转化问题,以及它们的用法。 一、CString和string之间的...

    String对象详解(附代码)

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

    Java String对象的经典问题

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

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

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

    读入未知数目的string对象.cpp

    读入未知数目的string对象.cpp

    String类创建对象问题

    在 Java 中,`String` 类并不属于八种基本数据类型之一,而是作为一个对象存在。这意味着 `String` 对象默认值为 `null`。尽管如此,`String` 类拥有其独特之处,比如它是不可变的(final),这保证了字符串一旦创建便...

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

    最后,需要破除一个错误的理解,即使用String.intern()方法不能将一个String对象保存到一个全局String表中。如果具有相同值的Unicode字符串已经在这个表中,那么String.intern()方法将返回该表中的字符串常量的引用...

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

    当我们创建一个 String 对象时,JAVA 虚拟机(JVM)首先会在字符串池中查找是否已经存在了该对象,如果存在,则不再创建新的对象,直接返回已存在对象的引用;如果不存在,则创建新的对象,并将其加入字符串池中。 ...

    String对象的内存分析

    对于`c`,`new String("xyz")`会创建一个新的`String`对象在堆中。同样,`d`也会在堆中创建一个新的`String`对象,尽管常量池中已有"xyz"。 3. `String s1 = new String("xyz"); String s2 = new String("xyz"); ...

    JAVA 中string类的运用

    直接赋值方式将直接在栈中创建一个 String 对象,而使用 new 关键字方式将在堆中创建一个 String 对象。 String 对象的比较 在 Java 中,对 String 对象进行比较有两种方式: 1. 使用 `==` 运算符:`str1 == str2...

    JavaScript String 对象参考手册

    首先,`length`属性是String对象的核心属性之一,它表示字符串中字符的数量。例如,`"Hello, world!".length`将返回13,因为这个字符串有13个字符。 接下来,String对象提供了一系列方法用于格式化和展示文本。如`...

Global site tag (gtag.js) - Google Analytics