public class StringTest1 {
public static void main(String[] args) {
//=================题1:字符串创建有两种方式,这两种方式有何区别是什么????==============================
//方式1: 字面量赋值创建
String str1 = "inbai";
String str2 = "inbai";
String str3 = "net";
//这样创建字符串,首先会去常量池里找有没有这个字符串,有就直接指向常量池的该字符串,没有就先往常量池中添加一个,再指向它
//方式2: 用new创建
String str4 = new String("inbai");
String str5 = new String("inbai");
String str6 = new String("net");
//new一个字符串时,做了两件事:
// 第一件: 首先在堆中生成了该字符串对象,
// 第二件: 去看常量池中有没有该字符串,如果有就不管了,没有就往常量池中添加一个, 所以第二种方式,会创建更多的对象.
System.out.println( str1 == str2 ? "str1 和 str2 等" : "str1 和 str2 不等" ); //我们都在常量池,当然相等
System.out.println( str4 == str5 ? "str4 和 str5 等" : "str4 和 str5 不等" ); //我们存放的地址不同, 用 == 比较的是我们的地址
System.out.println( str4.equals(str5) ? "str4 和 str5 等" : "str4 和 str5 不等" ); //我们的值相同, 用 equals 比较的是我们的值
}
}
public class StringTest2 {
/**
* 原理分析:
*
*
* @param args
*/
public static void main(String[] args) {
// 请问下题中, str2 和 str3 是否是相等?
String str1 = "inbai";
String str2 = str1 + "net";
String str3 = "inbainet"; //创建的时候, 先看看常量池里有没有这么个字符串, 一看, 已经有了, 所以str3的地址,就指向常量池地址
System.out.println(str2== str3 ? "str2 和 str3相等" : "不等"); //因为我们都是来自String的常量池
}
}
字符串创建有两种方式,这两种方式有何区别是什么
将字符串中某个子串反转,并返回新的字符串
统计一个字符串在另一个字符串中出现的次数
Java面试题请自己设计一个trim()方法