JAVA-String类面试题

1.两种方式创建String对象时内存分析

2.比较下面的String对象,它们是否相等


public class StringDemo {

	private static String getString()
	{
		return "AB";
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String str1 = "ABCD";
		String str2 = "A"+"B"+"C"+"D";
		String str3 = "AB"+"CD";
		String str4 = new String("ABCD");
		String temp = "AB";
		String str5 = temp+"CD";
		String str6 = getString()+"CD";
		
		System.out.println(str1 == str2);//true 编译优化操作
		System.out.println(str1 == str3);//true 编译优化操作
		System.out.println(str1 == str4);//false
		System.out.println(str1 == str5);//false
		System.out.println(str1 == str6);//false
		
	}

}
true
true
false
false
false

String对象比较:

1、单独使用" "引号创建的字符串都是直接量,编译期就已经确定存储到常量池中;

2、使用new String(" ")创建的对象会存储到堆内存中,是运行期才创建;

3、使用只包含直接量的字符串连接符如"aa"+"bb"创建的也是直接量编译期就能确定,已经确定存储到常量池中

4、使用包含String直接量(无final修饰符)的字符串表达式(如"aa" + s1)创建的对象是运行期才创建的,存储在堆中。

    通过变量/调用方法去连接字符串,都只能在运行时期才能确定变量的值和方法的返回值,不存在编译优化操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值