转自:http://www.2cto.com/kf/201401/272974.html,感谢作者的总结 什么是不可变对象? 众所周知, 在Java中, String类是不可变的.那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的.不能改变状态的意思是,不能改变对象内的成员变量,包括基本数据类型的值不能改变,引用类型的变量不能指向其他的对象,引用类型指向的对象的状态也不能改变. 区分对象和对象的引用 对于Java初学者, 对…
这里来对Java中的String对象做一个稍微深入的了解. Java对象实现的演进 String对象是Java中使用最频繁的对象之一,所以Java开发者们也在不断地对String对象的实现进行优化,以便提升String对象的性能. Java6以及之前版本中String对象的属性 在Java6以及之前版本中,String对象是对char数组进行了封装实现的对象,其主要有4个成员成员变量,分别是char数组.偏移量offset.字符数量count和哈希值hash.String对象是通过offset和…
1. 什么是不可变对象?       众所周知, 在Java中, String类是不可变的.那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的. 不能改变状态的意思是:不能改变对象内的成员变量,包括基本数据类型的值不能改变,引用类型的变量不能指向其他的对象,引用类型指向的对象的状态也不能改变. 2. 区分对象和对象的引用 对于Java初学者, 对于String是不可变对象总是存有疑惑.看下面代码: String s = "A…
字符串的拼接 String字符串虽然是不可变的字符串,但也同样可以进行拼接,只是会产生一个新的对象.String字符串拼接的时候可以使用"+"运算符或String的concat(String str)方法.其中"+"运算符的优势是可以连接任何类型的数据拼接成为字符串,而concat方法只能拼接String类型的字符串. 示例如下: String s1 = "Hello"; // 使用+运算符连接 String s2 = s1 + " &…
首先讲获得字符串对象的方式有两种,一种是直接使用字符串常量,一种是使用new关键字创建,但它们之间是有一些区别,如下运行实例: String s1 = new String("Hello"); String s2 = new String("Hello"); String s3 = "Hello"; String s4 = "Hello"; System.out.printf("s1 == s2 : %b%n&quo…
一.String介绍(引用类型)1.java.lang.String字符串.用""括住的时字符串,都可以看做是实现此类的实例类String中也有许多简单方法 2.特点1).字符串不变:字符串的值在创建后不能被更改2).因为String对象不可改变.所有他们可以被共享3).(底层是这么实现的)对String s1 赋值 "abc" 等效于char[] data = ['a','b','c'] 3.构造举例(面试可能会问,) // 无参构造String str = ne…
一.常用的创建方式 String s1=”abc“: String s2=”abc“: s1==s2    ==> true 解析:s1和s2指向的是同一个字符串池地址 二.不常用的创建方式 String s1=new String(”abc“): String s2=new String(”abc“):: s1==s2    ==> false 解析:s1和s2指向的是不同的字符串池地址,new的时候会重新创建一个新的内存空间装载字符串,哪怕之前有一样的 三.String的特点 (1).St…
一.String s = "abc"  和 String s = new String("abc") 的区别 1.String s = "abc"; 创建过程分析:在class文件被JVM装载到内存中,JVM会创建一块String Pool(String缓冲池).当执行String s = “abc”;时,JVM首先在String Pool中查看是否存在字符串对象“abc”(如何查看呢?用equals()方法判断),如果已存在该对象,则不用创建新…
Java原生的方法: String对象中有一个isEmpty的方法判断是否为空,其实isEmpty完全等同于string.length()==0,注意如果String本身是null,那么使用string.isEmpty()会报空指针异常(NullPointerException)判断一个String为空的最安全的方法,还是string ==null || string.isEmpty() 工具StringUtils的判断方法: 一种是org.apache.commons.lang3包下的: 另一…
String 我们知道字符串的分配和其他对象分配一样,是需要消耗高昂的时间和空间的,而且字符串我们使用的非常多.JVM为了提高性能和减少内存的开销,在实例化字符串的时候进行了一些优化:使用字符串常量池.每当我们创建字符串常量时,JVM会首先检查字符串常量池,如果该字符串已经存在常量池中,那么就直接返回常量池中的实例引用.如果字符串不存在常量池中,就会实例化该字符串并且将其放到常量池中.由于String字符串的不可变性我们可以十分肯定常量池中一定不存在两个相同的字符串. Java中的常量池,实际上…