Java基础:String类的常见面试题汇总

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

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

结果:
true
true

知识点内容
==“等于”,Java中如果是基本数据类型,==比较的是其值是否相等;若果是引用数据类型,比较的是其在内存中存放的地址是否相等。若相等返回为true,反之为false。
equalsJava中所有的类都是继承于Object这个超类下的,在Object中定义了一个equals的方法,这个初始行为是比较对象的内存地址,但是一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals有其自生的实现,而不再是比较类在堆中的存放地址了。String类中equals比较的是其对象的内容(字符序列)是否相同。

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

String s1 = new String(" abc ");

结果:
两个对象

知识点内容
public String( String original )优先在常量池中创建“abc”字符串参数,在堆内存中创建的字符串参数是常量池中的副本其地址值指向引用s1。

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

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

结果:
false
true

  • 题中s1指向的是堆内存的地址值,s2指向的是常量池的地址值。
    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

知识点内容
常量优化机制Java编译器有常量优化机制,题中“abc"为字符串常量,譬如类似的面试题 byte b1 = 3; byte b2 = 4; byte b3 = b1 + b2; byte b4 = 3 + 4; b3错误,b4正确。

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

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

结果:
false
true

  • s1+ “ s2 ” 中,s1相当于一个字符串变量,不能直接相加了。Java 语言提供对字符串串联符号("+")以及将其他对象转换为字符串的特殊支持。字符串串联是通过 StringBuilder(或 StringBuffer)类及其 append 方法实现的。字符串转换是通过 toString 方法实现的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敬人恒敬之

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值