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

[] String类生成对象剖析

    博客分类:
  • java
阅读更多
    string是java中用的频率最高的类,可真正理解其内部对象创建机制的人不多,本文就将对其对像创建机制做个小小的总结,若有不对的地方还往各位资深人士多多指教。。。

1.string类是final的,所以你不可能通过面向对象的多态机制去重载或者重写他的方法。

2.string对象被设计成immutable,被创建后的对象原则上是不能被改变的,一个唯一的办法就是通过java的反射机制去改变string对象的值,但这样往往存在着一些隐患,比如你重新赋值后的value值超过本来string对象的长度,将得不到你理想的结果,所以原则上是不提倡去改变string对象的值。

3.在jvm规范中,明确所有的java类都维护了一个叫做常量池的数组用以存储class中各种常量,string constant赫然在列,所以在创建java对象时首先是在常量池中创建一个string对象,如果采用new  string("abc"),那么在常见一个常量池中的string对象之后,将这个对象拷贝一份,放到heap里,所以上面的语句创建了两个string对象,当然jvm会先探测常量池中是否已经存在这个对象!

4.在对string对象进行比较的时候,==比较内存地址,equals比较string对象中字符数组的真正内容,

5.在对string对象调用hashcode的时候,只有在第一次调用的时候生成唯一的哈希值,再次调用hash值将不会重新生成,所以你在通过反射机制改变对象的值的时候不会重新为该对象设置新的hash值

6.实例

string s = "hello";  string s1 = "hello"; if (s==s1){      system.out.println("equal without new operator");  }  //你也许会觉得equal without new operator永远不会被打印,因为==比较的pointer本身而不是value,但由于jvm处理不带new创建string时的重用已经创建好的相同值的对象,所以s==s1是返回true的string t = new string("hello");  string u = new string("hello"); if (t==u){      system.out.println("equal with new operator");   }output:equal without new operator//new强制创建了两个不同的对象,虽然value一样

 
0
0
分享到:
评论

相关推荐

    实体类生成器,用于C#实体类生成

    3. 代码生成:根据分析结果,生成C#类的模板代码,包括属性、构造函数、属性访问器等。 4. 输出代码:将生成的代码保存为.CS文件,供项目引用。 三、实体类生成器的使用 1. 集成开发环境(IDE)插件:例如Visual ...

    Xml文件自动生成C# Class类

    4. **使用生成的类**:一旦生成了C#类,我们就可以在代码中实例化这些类,然后使用XML序列化器将XML数据填充到对象中,或者将对象的状态写回到XML文件。`XmlSerializer`类是.NET中用于XML序列化的主要工具。 5. **...

    实体类生成.zip

    3. 添加数据访问特性:为实体类添加特性(Attribute),如`[Key]`标识主键,`[Required]`标识非空字段,`[StringLength]`限制字符串长度等,这些特性可以帮助ORM(Object-Relational Mapping)框架更好地理解类与...

    bean对象生成数据表

    "bean对象生成数据表"这一技术就是利用这种对应关系,反向工程将Bean类转化为实际的数据库表结构,从而简化数据库设计和开发流程。这种方法在快速开发或者基于已有Bean模型构建数据库时非常实用。 首先,我们需要...

    String字符串生成图片

    根据提供的文件信息,我们可以深入分析并提取出与“String字符串生成图片”相关的多个知识点: ### 1. 使用C#将字符串转换为图像的基本原理 在C#编程中,可以利用.NET框架中的`System.Drawing`命名空间来实现将...

    java 根据简单对象自动 生成excel

    在Java编程中,生成Excel文件是一项常见的任务,特别是在数据导出、报告生成或者数据分析场景下。本示例探讨的是如何利用反射和简单的对象模型来自动创建Excel文件。这个项目的核心思想是通过对象的属性(字段)及其...

    JAVA中String类与StringBuffer类的区别

    这意味着每次对String对象进行操作(如连接字符串、替换字符等),都会生成一个新的String对象,这在处理大量字符串操作时可能会导致性能下降,因为频繁的对象创建会消耗更多内存。 - **内存分配**:String对象的...

    10 - ASM使用ClassWrite生成类 - 简书1

    ASM是一个强大的Java字节码操控和分析框架,它可以直接生成和修改Java类的字节码。在提供的代码示例中,我们看到如何使用ASM库来动态生成一个名为`HelloWorld`的类。以下是对该过程的详细解释: 1. **创建Class...

    C++课程设计之string字符串类

    C++课程设计之string字符串类 C++课程设计之string字符串类是C++程序设计中的一部分,主要是通过定义字符串类来实现对字符串的赋值、连接、复制、查找、交换操作。下面是相关的知识点: 一、字符串类的定义 在C++...

    Java String对象使用方法详解

    String类重写了equals()方法,改变了这些类型对象相等的原则,即判断对象是否相等依据的原则为判断二者的内容是否相等。 现在,我们来了解String类的本质。String类的本质是字符数组char[],其次String类是final的...

    string和StringBuffer的区别

    这种行为在字符串频繁修改时可能导致大量临时对象的生成,从而影响程序性能。 相比之下,`StringBuffer`(Java 5后还有线程安全的`StringBuilder`)是可变的。它们允许在已有对象上直接进行字符串操作,而不会每次...

    反向生成实体类

    在软件开发过程中,特别是基于数据库的应用程序开发中,我们经常需要将数据库中的表映射为面向对象编程语言(如Java)中的实体类(通常称为JavaBean)。这种过程称为反向工程或反向生成实体类。本文将详细探讨如何...

    java 中string 和srtingbuffer的区别

    - `String`的拼接操作:由于每次拼接都会生成新的`String`对象,所以当字符串操作频繁时,会产生大量的临时对象,消耗内存,并可能导致垃圾回收频繁,降低程序效率。 - `StringBuffer`的拼接操作:`StringBuffer...

    前端开源库-astring

    使用astring,开发者可以创建一个AST对象,这个对象描述了想要生成的JavaScript代码结构。astring库提供了API接口,用于根据AST生成源代码。这些API通常包括`generate`方法,接收一个AST对象并返回生成的字符串。...

    String与StringBuffer区别详解

    每次对`String`对象进行修改(如连接、替换字符等),都会生成一个新的`String`对象。这是因为`String`对象存在于常量池中,修改操作实际上是在常量池中创建新的引用,而不是修改原有的对象。 - `StringBuffer`(或...

    java随机生成字符串(字符随机生成类 生成随机字符组合).docx

    该类是本文档的核心类,用于生成随机字符串。它包含了一个枚举类型 `TYPE` 以及一系列静态变量和方法。 - **枚举类型 `TYPE`** - **定义**:`TYPE` 枚举定义了不同类型的字符串组合方式。 - **枚举值**: - `...

    java对象生成xml数据

    `JAXBContext`会分析这些类,生成所需的元数据,以便在对象和XML之间进行转换。创建`JAXBContext`的一般方式如下: ```java JAXBContext jaxbContext = JAXBContext.newInstance(MyJavaClass.class); ``` `...

    使用Iterator模式将对象转成String.docx

    总的来说,Iterator模式提供了一种灵活且强大的方式来遍历和表示对象结构,尤其在需要对复杂对象进行深度分析和调试时,它能有效地提升代码的可读性和维护性。在实际开发中,根据需求选择合适的迭代器实现,可以大大...

    面向对象程序设计(C++)实验指导书

    本实验指导书涵盖了面向对象程序设计的基本概念和技术,旨在帮助广大的 C++ 学习者掌握类和对象的概念、构造函数和析构函数的实现方法、对象数组、对象指针和 string 类的使用方法、静态数据成员和静态成员函数的...

    读json文件自动生成jsonpath

    具体实现可能包括解析JSON文件,分析其结构,并根据该结构动态生成JSONPath表达式。这涉及到对JSON数据的深度遍历以及构建相应的查询字符串。 总之,要实现“读json文件自动生成jsonpath”,你需要理解JSON和...

Global site tag (gtag.js) - Google Analytics