`
yanghongxia9
  • 浏览: 115072 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java的String理解

    博客分类:
  • java
 
阅读更多
理解"abc"与new String("abc")的区别,所涉及的知识点如下:

1.引用变量与对象的区别
  String s = new String("abc");此语句中的s仅仅只是一个引用变量,它不是对象。

2.java中所有的字符串都是一个String的对象,即"abc"就是一个String对象。

3.字符串对象是怎么创建的?
  由于String对象使用的比较频繁,java为了节省内存空间跟运行效率,在编译区间对字符串常量进行了优化,就是把所有的字符串常量放到了常量池,常量池的好处是该池中的所有相同的字符串常量被合并,并只占一个空间。我知道,对两个引用变量使用==可以判断它们的值(引用)是否相等,即可以判断它们是否指向同一对象:
public class String1 {

public static void main(String[] args) {
String s1 = "abc";
String s2 = "abc";
if(s1 == s2)
System.out.println("1");
else
System.out.println("2");

}

}
输出的结果:1 表明两个字符串常量实际上保存为一个对象,即上面的代码实际上只创建了一个String对象

现在看String s = new String("abc");语句,这里"abc"就是constant pool中的一个对象,而在运行的时候执行new,将constant中的对象copy一份到heap(堆)中,并把heap中的这个对象的引用赋给s,所以这条语句就创建了2个String对象

现在看下面程序:
public class String2 {

public static void main(String[] args) {
String s1 = new String("abc");
String s2 = new String("abc");
if(s1 == s2)
System.out.println("1");
else
System.out.println("2");

}

}
输出的结果:2
那么现在上面的代码创建了几个String 对象呢? (三个,constant pool 一个,heap中两个)


再来看看字符串+和字符串转换的问题,涉及的知识点:
1.字符串运算符(+,+=,java中唯一重载的两个运算符,java不支持运算符重载):如果一个操作数/表达式是String类型,则另一个操作数在运行时要先转换成String对象,并两者串接。看一程序段:
String s = new String("abc");
s = 1+2+s+3+4;
请问一共创建了多少String对象?

如果涉及基本数据类型,则会先转换成包装器类,然后调用toString()方法,我们知道几个包装器类都改写了从Object祖宗类继承的toString()方法(如果是null,则转换为"null"),关于+是串接还是加法,由操作数决定,所以很显然最后结果s="3abc34"。

那按照我上面的说话,语句似乎就应该生成5个String对象,即:
1+2=3,then 3->Integer(3)->"3"in constant
"3"+s(in heap)="3abc"(in heap)
"3abc"+3,first 3->Integer(3)->"3"in constant then "3abc3"
同样"3abc3"+4 then "3abc34"
但这个结果我不知道是不是正确,希望哪位高人指点下!


根据上面所述,应该是7个
String s="abc"; //1个,在constant pool中 
String s1=new String("abc"); 两个,一个在heap,一个在constant pool
String s2=new String("a"+"b"); 四个,三个在constant pool,一个在heap
分享到:
评论

相关推荐

    java String 数据结构

    这是因为`String`在Java中被实现为一个特殊的类,存储在一个连续的字符数组中,这个特性对于理解它的内部工作原理以及如何有效地使用它至关重要。下面将详细探讨`String`类的数据结构、常用方法以及适用于初学者的...

    java基础String类选择题练习题

    根据提供的信息,我们可以总结出这份Java基础String类选择题练习题主要聚焦于String及StringBuffer类的使用。尽管具体的题目内容未给出,但从所展示的信息中可以推断出该练习题集涵盖了以下几方面的知识点: ### 一...

    Java String与Byte类型转换

    在Java编程中,String对象和Byte...总之,Java中的String与Byte类型的转换是编程中不可或缺的部分,尤其在网络编程中,理解这两种类型之间的转换方式及其在网络数据交换中的作用,对于编写高效、可靠的程序至关重要。

    java String类的实现

    Java中的`String`类是编程中最常用的类之一,它在Java的`java.lang`包中...对于初学者来说,理解这些基本操作和原理是掌握Java字符串处理的关键。通过深入学习和实践,你可以更好地利用`String`类来处理各种文本数据。

    Java String 字符串创建理解 equels和\"==\" 差异

    在Java编程语言中,字符串(String)是一个非常基础且重要的数据类型。它被广泛用于存储文本信息,而关于字符串创建的理解,以及"equals()"方法和"=="运算符的区别,是每个Java开发者都应深入掌握的知识点。 首先,让...

    Java String对象的经典问题

    ### Java String对象的经典问题 #### 一、String 类与对象机制概述 在Java中,`String`类是一个非常重要的类,它提供...通过以上分析可以看出,深入理解`String`类和对象机制对于编写高效、可靠的Java程序至关重要。

    java String 与各种进制字符之间的转换

    在Java编程语言中,...总之,理解和掌握Java中String与各种进制字符之间的转换对于日常编程至关重要。通过熟练运用上述方法,可以轻松处理与进制相关的任务,无论是处理用户输入、解析文件内容还是与其他系统交互。

    Java 之 String 类型

    在Java编程语言中,String类型扮演着至关重要的角色。...在实际开发中,理解和熟练运用这些知识点,能够有效地编写出高效、安全的Java代码。同时,对于字符串的操作,还需要注意线程安全问题,尤其是在多线程环境中。

    我们一起学Java之String

    Java中的String类是一个重要的数据类型,用于存储和操作字符串数据。String类的特点是不可变性,也就是说,一旦String对象被创建,其值就无法改变。这一特性对于Java内存管理有着重要影响,因为String对象会存储在...

    java String类常用方法练习小结

    理解并熟练使用`String`类的方法对于Java开发者来说至关重要。通过实践,你可以更好地掌握字符串操作,从而编写出更加高效和优雅的代码。记得在处理字符串时考虑到其不可变性,并根据需要选择合适的方法来完成任务。

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

    标题和描述均强调了在Java中处理`String`对象时可能遇到的陷阱,尤其是在理解和使用`String`的处理机制上。文章由天津工业大学软件工程专业的翁龙辉撰写,旨在深入剖析`String`在Java中的独特行为及其潜在的陷阱。...

    深入了解java 中的String

    深入了解Java中的String类是至关重要的,因为String在Java编程中占据着极其重要的位置。下面将对给定的信息进行深入分析: ### 1. String 类是 final 的,不可被继承 在Java中,`String` 类被声明为 `final` 类型...

    java String Vector简单初学者代码

    Java中的String、Vector和Scanner是三个非常基础且重要的概念,对于初学者来说,理解它们的用法和原理是学习Java编程的关键步骤。 首先,我们来深入理解`String`类。在Java中,`String`是一个不可变的字符序列,这...

    java中String_十六进制String_byte[]之间相互转换

    ### Java中String、十六进制String与byte[]之间的相互转换 在Java开发中,字符串(String)、十六进制表示的字符串以及字节数组(byte[])之间的转换是非常常见的需求,尤其是在处理网络通信、文件读写等场景下。...

    java中的String类常用方法解析(一)

    以上就是`String`类的一些常见方法,理解并熟练使用它们对于提升Java编程效率至关重要。在实际开发中,开发者通常会结合这些方法来处理字符串,实现各种文本操作。通过阅读和分析`TestString.java`文件,我们可以...

    Java中String判断值为null或空及地址是否相等的问题

    在Java编程中,字符串(String)是非常常见且重要的数据类型。本文主要讨论了如何正确判断Java中的String对象是否为null、空值("")以及它们的地址是否相等。在处理字符串时,了解这些概念对于避免程序出错至关重要。...

    JAVA_String

    总之,`JAVA_String`是Java编程中不可或缺的部分,理解和熟练运用`String`类的方法能帮助我们更好地处理文本数据,提高代码质量和效率。在实际开发中,我们需要根据需求选择合适的方式创建和操作`String`对象,同时...

    Java的String类

    理解并熟练掌握`String`类的构造函数和各种操作方法,对于任何Java程序员来说都是必不可少的技能。通过本文的介绍,希望能帮助读者加深对`String`类的理解,并在实际编程中更加灵活地运用这一强大的工具。

    深入理解 Java String#intern() 内存模型.docx

    "深入理解 Java String#intern() 内存模型" Java String#intern() 内存模型是 Java 语言中一个重要的概念,.string#intern() 方法是 Java 字符串常量池中一个重要的组件。字符串常量池是一个固定大小的 HashMap,桶...

    简单说说JAVA的String和byte[]的关系

    ### JAVA中String与byte[]的关系解析 在Java编程语言中,`String`对象与`byte[]`数组之间的转换是常见的操作之一。理解这两者之间的关系对于处理文本数据、网络通信及文件读写等任务至关重要。 #### 一、String与...

Global site tag (gtag.js) - Google Analytics