面试题(直接赋值字符串连接时,考虑编译器和运行期,如果在编译期值可以确定,直接
copy常量池的对象,不会创建新对象,否则会创建新对象.)
1.
String a ="a";
String a1= a+1;
String a2 = "a1";
boolean result= (a1==a2); //a1创建了新对象,所以 result=flase;
2.
final String a = "a";
String a1 = a+"1";
String a2 = "a1";
boolean result = (a1==a2);
//a在常量池存在,所以a1不用创建对象,result=true;
3.
private static String getString(){
return "a";
}
String a = getString();
String a1= a+1;
String a2 = "a1";
boolean result = (a==b); //a是通过方法获取值,所以编译期,a1=a+1,会创建对象
所以 result =false;
4.
private static String getString(){
return "a";
}
final String a = getString();
String a1= a+1;
String a2 = "a1";
boolean result = (a==b);
//虽然a是final 但还是通过方法获取值,所以编译期,a1=a+1,会创建对象
所以 result =false;
String
方法简单使用
equals(Object);比较字符串的值,是否相等,区分大小写 返回类型:boolean
String a ="a";
String b = new String ("a");
a.equals(b) //true
equalsIgnoreCase(Object);比较字符串的值,是否相等,不区分大小写 返回类型:boolean
String a ="aB";
String b = new String ("ab");
a.equalsIgnoreCase(b) //true
charAt(int);取下标处的字符 返回类型:int
String a ="Hey,Java! Hello Word!";
char b = a.charAt(4); //b =J
length();获取字符串的长度 返回类型:int
String a ="Hey,Java! Hello Word!";
a.length();
isEmpty();判断字符串长度是否为0; 返回类型:boolean
String a ="Hey,Java! Hello Word!";
a.isEmpty(); //false;
toUpperCase(); 转换字符串为大写(原字符串不变) 返回类型:String
String a ="Hey,Java! Hello Word!";
String b = a.toUpperCase(); //b=HEY,JAVA! HELLO WORD!
toLowerCase(); 转换字符串为小写(原字符串不变) 返回类型:String
String a ="Hey,Java! Hello Word!";
String b = a.toLowerCase(); //b=hey,java! hello word!
trim(); 去掉字符串两端的空格(登录是用于校验,如误输入了空格) 返回类型:String
String a =" Hey,Java! Hello Word! ";
a.trim();
concat(String);连接字符串,和+差不多, 但效率比+号高很多(大概1倍) 返回类型:String
String a ="Hello";
String b = a.concat(",").concat("Hey,").concat("Java!");
//b=Hello,Hey,Java!
indexOf(String str); 查找b在a中首次出现的位置 返回类型:int
String a = "Hey,Java! Hello Word!";
int index = a.indexOf("Java"); //index =4
lastIndexOf(String str); 查找b在a中最后一次出现的位置 返回类型:int
String a = "Hey,Java! Hello Java Word!";
int index = a.lastIndexOf("Java"); //index =16;
substring(int begenIndex,int endIndex);截取从begenindex到endindex的字符串,不包含endindex这一位, 返回类型:String
String a = "Hey,Java! Hello Java Word!";
a.substring(4,8);//截取java字符串
startsWith(String prefix); 判断字符串是否以prefix开头 返回类型:boolean
String a = "Hey,Java! Hello Java Word!";
boolean result = a.startsWith("Hey");//result=true
endsWith(String prefix);判断字符串是否以prefix结束 返回类型:boolean
String a = "Hey,Java! Hello Java Word!";
boolean result = a.endsWith("rd!"); //result=true
contains(String s) 判断字符串是否包含s 返回类型:boolean
String a = "Hey,Java! Hello Java Word!";
boolean result = a.contains("llo"); //result=true
replace(old,new);替换字符串中的字符,把old换成new 返回类型:String
String a = "Hey,Java! Hello Java Word!";
String b= a.replace("Java","good");
split(String regex); 拆分字符串 返回类型 String []
String a = "2019-04-28";
String[] b =a.split("-");//得到[2019, 04, 28]
static join(分隔符,字符串); 把多个字符串用分隔符连接 返回类型String
String a = "2019-04-28";
String[] b =a.split("-"); //得到[2019, 04, 28]
String c = String.join("/", b);//得到2019/04/28
getBytes(String 编码格式);把字符串编码成 byte[] 返回类型:byte[]
String a = "Hey,世界";
byte [] bytes = a.getBytes();
//bytes = [72, 101, 121, 44, -28, -72, -106, -25, -107, -116]
new String(byte[] bytes,编码格式); 把byte[]解码成字符串 返回类型:String
byte[] bytes = {72, 101, 121, 44, -28, -72, -106, -25, -107, -116};
String str = new String(bytes);
//str= Hey,世界
String.valueOf(int ); int 转字符串 返回类型:String
int a =100;
String b = String.valueOf(a);
//b="100";
Integer.parseInt(String); String 转int; 返回类型:int
String a = "100";
int b = Integer.parseInt(a);
//b=100;
本文深入探讨Java中String类的各种操作,包括字符串连接、比较、截取、替换等常见方法的使用,以及它们在不同场景下的表现。同时,解析了字符串在编译期和运行期的行为差异,帮助理解字符串在内存中的存储机制。
470

被折叠的 条评论
为什么被折叠?



