java毕向东听课笔记17(字符串1)

String s1 = “abc”;其中s1是一个类类型变量,“abc”是一个对象。

字符串最大的特点:一旦被初始化就不可以被改变。

如果在接下来的语句中写出s1= “kk”;只能说明s1的地址变了,指向了“kk”对象,而在内存中,“abc”对象并没有变,所以成为一旦初始化就不可以改变。

----------------------------------------

字符串也可以这样初始化:

String s2 = new String("abc");

例题:判断下列输出结果

class StringDemo{
	public static void main(String[] args){
		String s1 = "abc";
		String s2 = new String("abc");
		
		System.out.println(s1==s2);
		System.out.println(s1.equals(s2));
	}
}



为什么出现这样的结果呢?

分析:第一个毫无疑问,两个对象肯定不相等。重点在第二个,Object类中,equals方法比较的是内存中的地址值,两个对象显然地址值不相等,为什么显示是true呢?

原因在于String类复写了Object类中的equals方法,该方法用于判断字符串是否相同。

问题二:s1和s2有什么区别:

答:s1在内存中有一个对象,s2在内存中有两个对象


问题三:如果出现下列代码,结果如何?

class StringDemo{
	public static void main(String[] args){
		String s1 = "abc";
		String s2 = "abc";		
		System.out.println(s1==s2);
	}
}

解释:在内存中有一个叫做常量池的位置,字符串就会放在里面,当创建s2时,系统发现在常量池中已经存在“abc”对象,所以系统就不再创建新对象,可以节约内存,所以s1和s2指向了同一片内存地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值