- 浏览: 224013 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (244)
- java (23)
- java多线程 (7)
- 综合 (1)
- oracle10g (24)
- div+css (1)
- Flex (27)
- java Nio (1)
- java设计模式 (8)
- struts2 (10)
- spring3.0 (5)
- SSH (9)
- dwr (5)
- hibernate3.6 (17)
- dom4j (1)
- sql优化 (5)
- Quartz任务调度框架 (1)
- AOP (3)
- JavaScript (18)
- jquery (3)
- JSF (9)
- ruby (1)
- 正则表达式 (1)
- 明日准备 (2)
- eclipse (3)
- gvim (1)
- CMS (1)
- linux (6)
- 杂 (4)
- java 设计模式 (1)
- MySql (10)
- JBPM (4)
- JSP技术 (1)
- Mybatis And Ibatis (2)
- 经验之谈 (10)
- WebService (1)
- java分布式(高性能,高可用,可伸缩) (0)
- springMvc (2)
- redis (0)
- ant (1)
- Nutz (6)
- 配置管理 (0)
- css+div (1)
- eChars (1)
- angularJs (1)
- D3 (3)
- Scala (1)
最新评论
-
Cobain_LI:
Cobain_LI 写道学习了,之前一直都没注意到有这样的问题 ...
js面向对象3--更简单的原型模式已经带来的问题以及解决办法 -
Cobain_LI:
Cobain_LI 写道学习了,之前一直都没注意到有这样的问题 ...
js面向对象3--更简单的原型模式已经带来的问题以及解决办法 -
Cobain_LI:
有个小失误,144和147行多了两个花括号
js面向对象2--js中工厂模式的演化(重要,详细) -
Cobain_LI:
学习了,之前一直都没注意到有这样的问题
js面向对象3--更简单的原型模式已经带来的问题以及解决办法 -
YTT1121:
有网络拓扑发现的源代码么,或者您会编写么?可以有偿求购,搞科研 ...
flex 之twaver1--简单网络拓扑实现
java虚拟机中有两种内存区域:堆内存、占内存。
栈内存主要保存以下内容:基本数据类型和对象的引用。
堆内存存储对象,栈内存的速度要快于堆内存。
总结成一句话就是:引用在栈而对象在堆
String类的本质是字符数组char[],其次String类是final的,是不可被继承的,String是特殊的封装类型,使用String时可以直接赋值,也可以用new来创建对象,但是这二者的实现机制是不同的。还有一个String池的概念,Java运行时维护一个String池,池中的String对象不可重复,没有创建,有则作罢。String池不属于堆和栈,而是属于常量池。
所以:通知直接赋值例如:String str1 = "chenchaoyang" 就是先在string池中寻找chenchaoyang,有则返回,没有则创建。而通过new创建就是重新在堆区创建了一个新的对象
== 比较的是引用对象的内存地址(堆内存对象的地址)
当调用 intern 方法时,如果string常量池已经包含一个等于此 String 对象的字符串(用 equals(Object) 方法确定), 则返回池中的字符串。否则,将此 String 对象添加到池中,并返回此 String 对象的引用。
String的直接赋值,先检查池中是否有生成的对象,如果有就直接指向
String 是字符串常量。是不可改变对象。如果使用str+ = “hello”的形式,其实是先通过new StringBuffer()对象,然后再进行字符串的append,然后在使用new String()的方式转化为String对象。因此效率比较的慢,而且是新开辟的对象。
hashCode()方法是返回字符串内容的哈希码,既然内容相同,哈希码必然相同,那他们就相等了,这个容易理解。所以不管是string常量池中的还是堆中的只要内容相同hashCode都是相同的。
实例:
输出:
true
true
false
true
true
true
true
String的equals源码:
HashCode方法源码:
栈内存主要保存以下内容:基本数据类型和对象的引用。
堆内存存储对象,栈内存的速度要快于堆内存。
总结成一句话就是:引用在栈而对象在堆
String类的本质是字符数组char[],其次String类是final的,是不可被继承的,String是特殊的封装类型,使用String时可以直接赋值,也可以用new来创建对象,但是这二者的实现机制是不同的。还有一个String池的概念,Java运行时维护一个String池,池中的String对象不可重复,没有创建,有则作罢。String池不属于堆和栈,而是属于常量池。
所以:通知直接赋值例如:String str1 = "chenchaoyang" 就是先在string池中寻找chenchaoyang,有则返回,没有则创建。而通过new创建就是重新在堆区创建了一个新的对象
== 比较的是引用对象的内存地址(堆内存对象的地址)
当调用 intern 方法时,如果string常量池已经包含一个等于此 String 对象的字符串(用 equals(Object) 方法确定), 则返回池中的字符串。否则,将此 String 对象添加到池中,并返回此 String 对象的引用。
String的直接赋值,先检查池中是否有生成的对象,如果有就直接指向
String 是字符串常量。是不可改变对象。如果使用str+ = “hello”的形式,其实是先通过new StringBuffer()对象,然后再进行字符串的append,然后在使用new String()的方式转化为String对象。因此效率比较的慢,而且是新开辟的对象。
hashCode()方法是返回字符串内容的哈希码,既然内容相同,哈希码必然相同,那他们就相等了,这个容易理解。所以不管是string常量池中的还是堆中的只要内容相同hashCode都是相同的。
实例:
public void testString(){ String s1 = "hello"; String s2 = "hello"; String s3 = new String("hello"); String s4 = s3.intern(); System.out.println(s1.equals(s2)); System.out.println(s1.equals(s3)); System.out.println(s1 == (s3)); System.out.println(s1 == s2); System.out.println(s1 == s4); System.out.println(s2 == s4); System.out.println(s1.hashCode() == s3.hashCode()); }
输出:
true
true
false
true
true
true
true
String的equals源码:
public boolean equals(Object anObject) { //如果是同一个对象 if (this == anObject) { return true; } //如果传递进来的参数是String类的实例 if (anObject instanceof String) { String anotherString = (String)anObject; int n = count;//字符串长度 if (n == anotherString.count) //如果长度相等就进行比较 { char v1[] = value;//取每一个位置的字符 char v2[] = anotherString.value; int i = offset; int j = anotherString.offset; while (n-- != 0) //对于每一位置逐一比较 { if (v1[i++] != v2[j++]) return false; } return true; } } return false; }
HashCode方法源码:
private final char value[];//定义一个字符数组value,用于存储字符串里面的字符 private final int offset;//定义offset变量表示字符串第一个字符的下标索引 private final int count;//定义count变量表示字符串中字符的个数 private int hash; // Default to 0,默认值为0 public int hashCode() { int h = hash; if (h == 0 && count > 0) { int off = offset; char val[] = value; int len = count; for (int i = 0; i < len; i++) { h = 31*h + val[off++]; } hash = h; } return h; }
发表评论
-
浅谈java接口中定义属性
2015-03-11 22:55 7003package com.supan.reflact; p ... -
JMs 简单实例
2015-01-30 14:00 5461.前一讲简单的介绍了 ... -
java 泛型
2015-01-29 14:04 5971. 概述 在引入范型之前 ... -
配置jkstatus
2015-01-24 00:21 637在已配置完成的 apache 项目中 workers.pro ... -
apache+tomcat架设图片服务器
2015-01-23 22:15 1156apache + 2个tomcat分工指定: apac ... -
apache+tomcat实现负载均衡
2015-01-23 13:03 452所需材料: 1,apache_2.0.55-win32-x86 ... -
java web高并发解决方案
2015-01-23 01:28 884java处理高并发高负载类 ... -
java 实现简单及时通讯工具
2014-12-07 16:52 733客户端接受: package com.supan; i ... -
sql 语句优化
2014-12-03 23:50 486一: 尽量挑选自己需要的字段进行查询, 不要随便使用 s ... -
21312
2014-06-30 23:53 535http://supanccy2013.iteye.com/a ... -
java之jxl输入excel文件
2014-05-02 23:37 971注:原创作品,分享以供交流,转载请注明出处。 本博文需要引入 ... -
java虚拟机工作机制
2014-05-02 23:33 930注:原创作品,分享以供交流学习,转载请注明出处。 Java虚 ... -
java算法之 递归
2014-05-01 22:41 828注:原创作品,分享以供交流学习,转载请注明出处。 递 ... -
HttpRequest.getSession(boolean boo)方法注意点
2014-05-01 01:04 2132getSession(boolean create) ... -
java 之 String的那些事儿
2014-04-17 00:05 567equals方法和==的区别 首先大家知道,String既 ... -
java 之递归便利文件夹中的文件
2014-04-16 00:34 829import java.io.File; public ... -
java 之this,super关键字
2014-04-16 00:29 455this关键字的三种用法: 第一、通过this ... -
java 之md5加密
2014-04-16 00:25 622package com.supan.md5; import ... -
java String变量判空 效率
2014-04-09 23:16 1462Java中的String为引用类型,我们经常遇到判空的情况,s ... -
java socket简单写了一个即时通讯工具(代码有待优化。)
2014-02-17 08:42 25121,服务端不断轮训创建socket链接,一旦链接成功,启动两个 ...
相关推荐
接下来,我们转向String类型的深度解析。String在Java中被广泛使用,它具有不可变性,意味着一旦创建,其值就不能改变。这是为了保证线程安全和提高性能。String对象有两种创建方式:字面量(如`"hello"`)和`new ...
在java语言的所有数据类型中,String类型是比较特殊的一种类型,同时也是面试的时候经常被问到的一个知识点,本文结合java内存分配深度分析关于String的许多令人迷惑的问题。下面是本文将要涉及到的一些问题,...
### Java中常见异常类型及分析 #### 一、概述 在Java编程中,异常处理是一项重要的技术,它有助于开发者在程序运行过程中及时发现并处理错误,确保程序的稳定性和健壮性。Java语言中提供了丰富的异常处理机制,...
XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用在软件开发、网络传输、数据存储等领域。...通过上述步骤,我们可以深入理解和应用DOM4J解析XML的精髓,为Java项目中的XML处理提供强大支持。
### 迭代大师的修炼之道:Java中Iterator与Enhanced for loop的深度解析 #### 一、引言 在Java编程的世界里,迭代是处理集合数据的重要手段之一。本文将重点探讨两种常用的迭代方式——`Iterator`接口和`Enhanced ...
### 静态的魔力:Java中静态方法和变量的深度解析 #### 一、引言 Java作为一门强大的编程语言,在软件开发领域占据着举足轻重的地位。其面向对象的特性、跨平台的能力以及强大的标准库,使得Java成为开发企业级...
# 探索Java EE的企业心脏:EJB的深度解析 Java是一种广泛应用的编程语言,它由Sun Microsystems公司在1995年首次推出,后被Oracle公司收购。Java的设计初衷是面向对象,具备跨平台性、网络编程能力、健壮性、安全性...
### Java 方法的艺术:重载与重写的深度解析 在 Java 编程语言中,方法的重载(Overloading)和重写(Overriding)是面向对象编程的重要概念。这两种技术使得方法能够在不同的上下文中表现出不同的行为,从而增强了...
在Java编程语言中,有些独特的特性或技巧常常被开发者戏称为“黑魔法”,因为它们可能在初学...以上就是Java中的五个“黑魔法”知识点的详细解析和示例代码。理解并熟练掌握这些特性,将使你的Java编程技能更上一层楼。
它提供了丰富的API,允许开发者对SQL语句进行深度解析,如访问查询中的表名、列名、条件表达式等元素。通过这些API,我们可以构建复杂的SQL操作逻辑,例如动态生成SQL、修改SQL结构或者提取查询信息。 使用...
本教程将深入探讨如何使用Java解析Pcap文件,以提取其中的五元组信息。 五元组是网络数据包分析中的基本概念,它由源IP地址、目的IP地址、源端口号、目的端口号和传输层协议(通常是TCP或UDP)组成。这五个元素唯一...
### 探索Java数据库连接的奥秘:JDBC的深度解析与实践 #### Java的特点及其在数据库连接中的作用 Java作为一种强大的编程语言,在其发展过程中不断优化和改进,旨在为开发者提供一个高效、灵活且安全的开发环境。...
接口则是Java中另一种抽象类型,它仅包含抽象方法(没有方法体)和常量。接口不能包含任何实现,但可以被多个类实现。通过实现接口,类必须实现接口中定义的所有抽象方法,从而确保类遵循接口所定义的行为规范。接口...
这篇深度解析将聚焦于这两个参数的生成机制,帮助开发者理解如何在Java环境中实现它们。 首先,x-ca-nonce(通常称为nonce,即“一次性的随机数”)是一种用于防止重放攻击的安全措施。在每次请求时,服务器会生成...
### Java异常处理的四大金刚:try、catch、finally和throw的深度解析 #### Java异常处理概述 异常处理机制是程序设计中的一个重要组成部分,它能够帮助程序员有效地管理程序运行过程中可能出现的各种错误情况。...
在Java编程语言中,解析BMP(Bitmap)位图文件是一项常见的图像处理任务。BMP是一种无损的图像文件格式,广泛应用于Windows操作系统和许多其他软件中。它以未经压缩的二进制形式存储图像数据,因此解析BMP文件可以...
在Java中集成FFmpeg,可以实现对视频的深度操作,例如获取元数据、截图以及计算视频播放时间。 首先,我们要理解FFmpeg如何工作。FFmpeg通过命令行接口执行各种任务,例如转换视频格式、提取音频、调整视频质量等。...
- `containsBean(String name)`:判断容器中是否存在指定名称的Bean。 - `isSingleton(String name)`:判断指定Bean是否为单例模式。 ##### 2. DefaultListableBeanFactory - **功能**:作为`BeanFactory`的一个...