- 浏览: 218324 次
- 性别:
- 来自: 武汉
文章分类
- 全部博客 (110)
- java (111)
- c# winform tablelayoutpanel学习 合并行的布局及动态增加删除内部控件 (1)
- javascript常用正则 (1)
- 认识Java程序 (1)
- UniqTask for android (1)
- JAX-RS 从傻逼到牛叉 2:开发一个简单的服务 (1)
- Spring MVC 数据绑定的扩展 (1)
- 手机分辨率 (1)
- tomcat的favicon.ico的用法 (1)
- Cookie读写demo (1)
- hive相关操作文档收集 (1)
- 测试开发工程师的发展 (1)
- JSF入门十(自定义转换器) (1)
- 《你能行:微软精英的职场心里话》 (1)
- JNI程序如何检测C代码的内存泄漏 (1)
- 做了几天的调研工作 (1)
- 使用Microsoft Web Application Stress进行压力测试 (1)
- 在线共享音乐吧(Online Share Music Bar)解决方案 (1)
- 如何二次压缩RM和RMVB格式文件 (1)
- 突然想起了红色联盟 就去看了看 (1)
- 推荐两个关于DB2认证的站点 (1)
- 安装Microsoft .NET Framework SDK 快速入门、教程和示例 (1)
- 去掉C/C++程序代码中的注释 (1)
- 数据结构之kmp模式匹配 (1)
- JS跨域 (1)
- SP2-0734: 未知的命令开头 "exp test/t..." - 忽略了剩余的行 解决办法 (1)
- Android开发之fedora13下编译Android源码 (1)
- Android开发之Linkify (1)
- json学习之三:JSONArray的应用 (1)
- js 数组操作代码集锦 (1)
- jquery跨域调用json数据 (1)
- qtdemo浅析 (1)
最新评论
-
songshuang:
最近怎么都盗我的文
做个小调查,程序员们都是什么星座的?
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.实例
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一样
发表评论
-
qtdemo浅析
2012-02-07 16:14 1585[size=x-small;]? ? <span ... -
jquery跨域调用json数据
2012-02-03 11:39 1435? <script type="te ... -
js 数组操作代码集锦
2012-02-03 10:59 1144[size=small;]这段时间做的一个项目,用到数 ... -
json学习之三:JSONArray的应用
2012-02-02 15:29 71524从json数组中得到 ... -
Android开发之Linkify
2012-01-31 13:33 2211<h1>Android开发之Linkify ... -
Android开发之fedora13下编译Android源码
2012-01-11 16:04 1153<h1>Android开发之fedora1 ... -
SP2-0734: 未知的命令开头 "exp test/t..." - 忽略了剩余的行 解决办法
2011-12-28 14:13 3870<span style="font-f ... -
JS跨域
2011-12-21 16:43 2638原帖地址:http://itgeeker.com/ma ... -
数据结构之kmp模式匹配
2011-12-21 10:04 1185KMP字符串模式匹配详解 KMP字符串模式匹配通俗点说 ... -
去掉C/C++程序代码中的注释
2011-12-20 16:49 3060程序员面试宝典上面的题目有很多是很经典的问题,可供我 ... -
安装Microsoft .NET Framework SDK 快速入门、教程和示例
2011-12-19 10:09 2054Microsoft .NET Framework SD ... -
推荐两个关于DB2认证的站点
2011-12-19 09:59 848关于DB2认证的在线中文教程<br>htt ... -
突然想起了红色联盟 就去看了看
2011-12-17 10:54 1181突然想起了红色联盟,于是就偷偷的爬上红盟站点,看了看红 ... -
如何二次压缩RM和RMVB格式文件
2011-12-16 17:12 1121对RM/RMVB格式文件进行二次压缩,可以用一个软件E ... -
在线共享音乐吧(Online Share Music Bar)解决方案
2011-12-14 19:54 998</span></font>& ... -
使用Microsoft Web Application Stress进行压力测试
2011-12-14 18:33 879<font size="2" ... -
做了几天的调研工作
2011-12-14 17:29 1017</span></span> ... -
JNI程序如何检测C代码的内存泄漏
2011-12-13 14:59 1449Java调用C的JNI程序很容易出现内存泄漏问题,因为 ... -
《你能行:微软精英的职场心里话》
2011-12-12 14:39 961<p class="MsoNorm ... -
JSF入门十(自定义转换器)
2011-12-09 11:00 975本文参考 http://www.javaworld.c ...
相关推荐
3. 代码生成:根据分析结果,生成C#类的模板代码,包括属性、构造函数、属性访问器等。 4. 输出代码:将生成的代码保存为.CS文件,供项目引用。 三、实体类生成器的使用 1. 集成开发环境(IDE)插件:例如Visual ...
4. **使用生成的类**:一旦生成了C#类,我们就可以在代码中实例化这些类,然后使用XML序列化器将XML数据填充到对象中,或者将对象的状态写回到XML文件。`XmlSerializer`类是.NET中用于XML序列化的主要工具。 5. **...
3. 添加数据访问特性:为实体类添加特性(Attribute),如`[Key]`标识主键,`[Required]`标识非空字段,`[StringLength]`限制字符串长度等,这些特性可以帮助ORM(Object-Relational Mapping)框架更好地理解类与...
"bean对象生成数据表"这一技术就是利用这种对应关系,反向工程将Bean类转化为实际的数据库表结构,从而简化数据库设计和开发流程。这种方法在快速开发或者基于已有Bean模型构建数据库时非常实用。 首先,我们需要...
根据提供的文件信息,我们可以深入分析并提取出与“String字符串生成图片”相关的多个知识点: ### 1. 使用C#将字符串转换为图像的基本原理 在C#编程中,可以利用.NET框架中的`System.Drawing`命名空间来实现将...
在Java编程中,生成Excel文件是一项常见的任务,特别是在数据导出、报告生成或者数据分析场景下。本示例探讨的是如何利用反射和简单的对象模型来自动创建Excel文件。这个项目的核心思想是通过对象的属性(字段)及其...
这意味着每次对String对象进行操作(如连接字符串、替换字符等),都会生成一个新的String对象,这在处理大量字符串操作时可能会导致性能下降,因为频繁的对象创建会消耗更多内存。 - **内存分配**:String对象的...
ASM是一个强大的Java字节码操控和分析框架,它可以直接生成和修改Java类的字节码。在提供的代码示例中,我们看到如何使用ASM库来动态生成一个名为`HelloWorld`的类。以下是对该过程的详细解释: 1. **创建Class...
C++课程设计之string字符串类 C++课程设计之string字符串类是C++程序设计中的一部分,主要是通过定义字符串类来实现对字符串的赋值、连接、复制、查找、交换操作。下面是相关的知识点: 一、字符串类的定义 在C++...
String类重写了equals()方法,改变了这些类型对象相等的原则,即判断对象是否相等依据的原则为判断二者的内容是否相等。 现在,我们来了解String类的本质。String类的本质是字符数组char[],其次String类是final的...
这种行为在字符串频繁修改时可能导致大量临时对象的生成,从而影响程序性能。 相比之下,`StringBuffer`(Java 5后还有线程安全的`StringBuilder`)是可变的。它们允许在已有对象上直接进行字符串操作,而不会每次...
在软件开发过程中,特别是基于数据库的应用程序开发中,我们经常需要将数据库中的表映射为面向对象编程语言(如Java)中的实体类(通常称为JavaBean)。这种过程称为反向工程或反向生成实体类。本文将详细探讨如何...
- `String`的拼接操作:由于每次拼接都会生成新的`String`对象,所以当字符串操作频繁时,会产生大量的临时对象,消耗内存,并可能导致垃圾回收频繁,降低程序效率。 - `StringBuffer`的拼接操作:`StringBuffer...
使用astring,开发者可以创建一个AST对象,这个对象描述了想要生成的JavaScript代码结构。astring库提供了API接口,用于根据AST生成源代码。这些API通常包括`generate`方法,接收一个AST对象并返回生成的字符串。...
每次对`String`对象进行修改(如连接、替换字符等),都会生成一个新的`String`对象。这是因为`String`对象存在于常量池中,修改操作实际上是在常量池中创建新的引用,而不是修改原有的对象。 - `StringBuffer`(或...
该类是本文档的核心类,用于生成随机字符串。它包含了一个枚举类型 `TYPE` 以及一系列静态变量和方法。 - **枚举类型 `TYPE`** - **定义**:`TYPE` 枚举定义了不同类型的字符串组合方式。 - **枚举值**: - `...
`JAXBContext`会分析这些类,生成所需的元数据,以便在对象和XML之间进行转换。创建`JAXBContext`的一般方式如下: ```java JAXBContext jaxbContext = JAXBContext.newInstance(MyJavaClass.class); ``` `...
总的来说,Iterator模式提供了一种灵活且强大的方式来遍历和表示对象结构,尤其在需要对复杂对象进行深度分析和调试时,它能有效地提升代码的可读性和维护性。在实际开发中,根据需求选择合适的迭代器实现,可以大大...
本实验指导书涵盖了面向对象程序设计的基本概念和技术,旨在帮助广大的 C++ 学习者掌握类和对象的概念、构造函数和析构函数的实现方法、对象数组、对象指针和 string 类的使用方法、静态数据成员和静态成员函数的...
具体实现可能包括解析JSON文件,分析其结构,并根据该结构动态生成JSONPath表达式。这涉及到对JSON数据的深度遍历以及构建相应的查询字符串。 总之,要实现“读json文件自动生成jsonpath”,你需要理解JSON和...