使用JAVA中String的一些体会

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package com.racky.string;

/**
*
* @author Racky
*/
public class StringTest {
public static void main(String args[])
{
String s0="racky";
String s1="racky";
String s2="rac"+"ky";
/**
* s0,s1均为常量,在编译时就已经确定
* 当一个字符穿为多个常量字符穿连接时,它自己也是常量,所以s2也是"racky"的一个引用
**/
System.out.println(s0==s1);
System.out.println(s1==s2);//==比较地址是否相同,也就是是否是同一个字符串的引用
System.out.println(s0.equals(s1));//equals比较unicode是否相同
System.out.println(s1.equals(s2));
System.out.println("******************************************************");
String s3="racky";
String s4=new String("racky");
String s5="rac"+new String("ky");
/**
*用new String() 创建的字符串不是常量,不能在编译期就确定,
* 所以new String() 创建的字符串不放入常量池中,它们有自己的地址空间
* s3为常量池中"racky"的引用,而s4,s5均不能在编译时确定
* */
System.out.println(s3==s4);
System.out.println(s3==s5);
System.out.println(s4==s5);
System.out.println(s3.equals(s4));
System.out.println(s3.equals(s5));
System.out.println(s4.equals(s5));
System.out.println("*******************************");

/*
* 存在于.class文件中的常量池,在运行期被JVM装载,
* 并且可以扩充。String的intern()方法就是扩充常量池的一个方法
* 当一个String实例str调用intern()方法时,Java查找常量池中是否有相同Unicode的字符串常量,
* 如果有,则返回其的引用,如果没有,
* 则在常量池中增加一个Unicode等于str的字符串并返回它的引用;
* */
s4.intern();
s5=s5.intern();
System.out.println(s3==s4);
System.out.println(s3==s4.intern());
System.out.println(s3==s5);
System.out.println(s4==s5);
System.out.println(s4.intern()==s5);
/*
* 关于String是不可变的
* 这一说又要说很多,大家只要知道String的实例一旦生成就不会再改变了,
* 比如说:String str=”kv”+”ill”+” “+”ans”;
* 就是有4个字符串常量,首先”kv”和”ill”生成了”kvill”存在内存中,
* 然后”kvill”又和” “ 生成 ”kvill “存在内存中,
* 最后又和生成了”kvill ans”;并把这个字符串的地址赋给了str,
* 就是因为String的“不可变”产生了很多临时变量,
* 这也就是为什么建议用StringBuffer的原因了,因为StringBuffer是可改变的。
* */
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值