string字符串的一些特点

/**

  • String 是不变对象,即:
  • 字符串对象创建后,表示的字符内容不可变,若改变必定创建新对象
  • @author Lemon

*/
public class StringDemo {

public static void main(String[] args) {
	/*
	 * java对于字符串有一个个优化,即:字符串常量池,这是在堆内存中开辟的一块空间,
	 * 用于保存所有使用该字面量形式
	 * 创建的字符串对象,当再次使用该字面量创建新的字符串时会直接重用而不会再创建新的来节省内存开销
	 */
	String s1="123abc";
	//s2会重用s1创建的字符串对象
	String s2="123abc";
	String s3="abc";
	String s4=new String("123abc");
	System.identityHashCode(s4);
	System.identityHashCode(s1);
	System.out.println(s1==s2);//true
	System.out.println(s1==s3);//false
	/*
	 *s2与s4是两个不同的字符串对象,虽然内容都是"123abc",
	 *但是两个变量保存的地址不同 
	 */
	System.out.println(s2==s4);//false
	/*
	 * 通常我们比较字符串都是比较他们的内容,因此比较字符串(引用数据类型)我们不会使用"==",
	 * 而是使用字符串的方法equals.
	 * equals方法是用来表示两个字符串对象所表示的内容是否相同
	 */
	boolean tf=s1.equals(s4);
	System.out.println(tf);//true
	/*
	 * 这里用到了编译器的一个特性:
	 * 编译器在编译源代码时,当遇到一个计算表达式可以在编译期间
	 * 确定结果是就会直接进行计算,并将结果编译到class文件中,这样jvm每次运行程序是就
	 * 无需在计算,比如:int a=1+1;
	 * 编译器编译后class改为:int a=2;
	 * 下面的字符串也是如此,会被改成:
	 * String s5="123abc";
	 */
	String s5="123"+"abc";
	//编译器编译时就把"123"+"abc"拼接成"123abc"了
	System.out.println("s5:"+s5);
	System.out.println(s5==s1);//true
	
	String s="123";
	String s6=s+"abc";
	System.out.println("s6:"+s6);
	System.out.println(s6==s1);//false
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值