String 一些问题

前言:

等号“==”对于基本类型,比较的是值,对于引用类型,比较的是内存地址。


1.在对象池中创建,如果常量池中已经存在则返回常量池中已经有的。

private static void test1() {
	String s1 = "jiaozi";
	String s2 = "jiaozi";
	System.out.println("1       " + (s1 == s2));
}
结果:true

2.一个在String pool中,一个在堆中。

private static void test2() {
	String s1 = "jiaozi";
	String s3 = new String("jiaozi");// 参数是池中(如果没有则创建一个)的,但是s3指向的是堆中的数据
	System.out.println("2       " + (s1 == s3));
}
结果:false

3.编译以后,s4="jiaozi".

private static void test3() {
	String s1 = "jiaozi";
	String s4 = "jiao" + "zi";
	System.out.println("3       " + (s1 == s4));
}
结果:true

4.intern方法返回Strng pool中的对象,另外对于字符串a.equals(b),那么a.intern() == b.intern(),反之亦然。

	private static void test4() {
		String s1 = "jiaozi";
		String s6 = new String("jiaozi");
		String s5 = s6.intern();// 返回的是池中的数据
		System.out.println("4       " + (s1 == s5));
	}
结果:true

5.只要有new存在就会在堆中生成一个对象

private static void test5() {
	String s3 = new String("jiaozi");// 参数是池中的,但是s3指向的是堆中的数据
	String s6 = new String("jiaozi");// 又是在堆中创建。
	System.out.println("5       " + (s6 == s3));
}
结果:false
6.同第3个

private static void test6() {
	String s7 = "jiaozi1";
	String s8 = "jiaozi" + 1;
	System.out.println("6       " + (s7 == s8));
}
结果:true

7.对于字符串的相加,内部使用StringBuilder类的append,和toString()来实现,toString()中调用了构造函数,会在堆中生成一个对象。

private static void test7() {
	String ab1 = "ab";
	String b = "b";
	String ab2 = "a" + b;
	System.out.println("7       " + (ab1 == ab2));
}
结果:false

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值