String面试题
  ILwIY8Berufg 2023年11月02日 30 0

1.判断定义为String类型的s1和s2是否相等

String s1 = "abc";
	String s2 = "abc";
	System.out.println(s1 == s2); 					
	System.out.println(s1.equals(s2));

解答:

true,true “==”比较的是基本类型值,比较的是引用类型地址,String是引用类型,所以是比较地址;equal,你是abc,我也是abc。就相等,字符序列相同就相等

String面试题_常量池

2.下面这句话在内存中创建了几个对象?

String s1 = new String("abc");

解答:

2 在堆中new了一个对象,在常量池中创建了一个对象

String面试题_常量池_02

3.判断定义为String类型的s1和s2是否相等

String s1 = new String("abc");			
	String s2 = "abc";
	System.out.println(s1 == s2);		
	System.out.println(s1.equals(s2));true

解答: false,true new会在堆和常量池中都创建对象,String 只在常量池中创建,所以地址不同 equals同上

4.判断定义为String类型的s1和s2是否相等

String s1 = "a" + "b" + "c";
	String s2 = "abc";
	System.out.println(s1 == s2);		
	System.out.println(s1.equals(s2));

解答:

true,true

String面试题_常量池_03

java中有常量优化机制,你存了abc,比较的也是abc,所以地址相同 Java常量优化机制: 1.如果常量池中有像创建的对象,则仅仅是将地址指向这个常量即可。 2.如果是几个字符组成的字符串,变成字符串常量的时候,也是遵循上一条规定; equals同上

5.判断定义为String类型的s1和s2是否相等

String s1 = "ab";
	String s2 = "abc";
	String s3 = s1 + "c";
	System.out.println(s3 == s2);
	System.out.println(s3.equals(s2));

解答:false,true

常量优化只是针对常量,如果有变量的话就不能被优化 串联符号“+”通过StringBuffer缓冲将结构转化为一个toString,所以它有自己的地址值 String s3 = s1+"c";这一句话,是在StringBuffer缓冲区中进行创建一个StringBuffer对象,将两者相加。但是对s3进行赋值时不能够直接将缓冲区的对象地址取来而是用toString方法变成另外的堆内存,然后赋值给s3,所以,s3和s2的地址值已经不同了。 equals同上

String面试题_bc_04

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
ILwIY8Berufg