本文内容是字符串梳理和总结,本文内容包括:
一:概念
\u0000
二:两者之间的转换
String s1 = "abc";
char ch = s1.charAt(1); //String2char
System.out.println(ch);
String str = String.valueOf(ch); // char2String
System.out.println(str);
一:两者之间的转换
char chs[] = toCharArray()
:把字符串转换为字符数组new String(chs)
:把字符数组转换为字符串二:转换示例
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入字符串:");
String source = scanner.nextLine();
System.out.println("排序后的字符串是:" + sortString(source));
}
public static String sortString(String source) {
char[] chars = source.toCharArray(); // 字符串转字符数组
Arrays.sort(chars);
return new String(chars); //字符数组转字符串
}
一:概念
byte bytes[] = "".getBytes()
:把字符串转换为字节数组new String(bytes)
:把字节数组转换为字符串二:案例
例如: aBcXyz
变成 AbCxYZ
public static void main(String[] args) {
String original = "abcXYZ";
String dest = convertPassword(original);
System.out.println("原始密码:" + original);
System.out.println("转换后密码:" + dest);
}
public static String convertPassword(String original) {
byte bytes[] = original.getBytes(); //字符串转byte数组
for (int i = 0; i < bytes.length; i++) {
if(bytes[i]<=90){
bytes[i]+=32;
}else if(bytes[i]>=97){
bytes[i]-=32;
}
}
return new String(bytes); //byte数组转字符串
}
一:字符串的两种使用方式
二:两种方式的内存分配
三:使用字面量创建字符串对象
String str1 = "计算机";
String str2 = "计算机";
System.out.println(str1 == str2);
第一行代码
第二行代码
小贴士:
//常量字符串的"+"操作,编译阶段直接会合成为一个字符串。
String str = "计算" + "机"; //等同于 String str = "计算机";
//对于final字段,编译期直接进行了常量替换。
final String str1 = "计算";
final String str2 = "机";
String str3 = str1 + str2; //等同于String str3 = "计算机";
//变量连接时,jvm会在编译的时候将其优化为StringBuilder 的拼接,其也生成了新对象
String str4 = "123";
String str5 = new String("123");
String str6 = str4 + str5;// 等同于String str6 = new StringBuilder("123").append("123").toString();
四:使用字符串对象创建字符串
String str1 = new String("计算机");
String str2 = new String("计算机");
System.out.println(str1 == str2);
第一行代码
第二行代码
五:特点
六:测试一下
String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2); //此处输出什么?答:
String s3 = new String("abc");
String s4 = new String("abc");
System.out.println(s3 == s4); //此处输出什么?答:
一:内存分配
二:测试一下
String s1 = "abc"; //分配内存吗?
String s2 = "abc"; //分配内存吗?
String s3 = new String("abc"); //分配内存吗?
String s4 = new String("abc"); //分配内存吗?
一:概念
二:示例
代码:
public static void main(String[] args) {
String str = "云创";
str = "云创动力";
}
内存
分析:
str = "云创"
时,在常量池中查找是否有"云创"字面量,如果有,就直接使用,如果没有就分配内存,赋值为"云创"。str = "云创动力"
时,在常量池中查找是否有"云创动力"字面量,如果有,就直接使用,如果没有就分配内存,赋值为"云创动力"。三:测试一下
可共享
String s1 = "abc"; //此处为abc分配内存吗?
String s2 = "abc"; //此处为abc分配内存吗?
System.out.println(s1 == s2);
值不变
public static void main(String[] args) {
String s1 = "abc"; //此处为abc分配内存吗?
String s2 = "abc"; //此处为abc分配内存吗?
s2="def"; //此处为def分配内存吗?
System.out.println(s1); // s1的值是def吗?
}
String.valueOf()
+
Byte.parseByte(data)
Short.parseShort(data)
Integer.parseInt(data)
Long.parseLong(data)
Float.parseFloat(data)
Double.parseDouble(data)
Boolean.parseBoolean(data)
"".charAt(index)
代码演示
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入第一个年龄:");
String str1= input.next();
System.out.println("请输入第二个年龄:");
String str2= input.next();
int age1 = Integer.parseInt(str1); //字符串转基本类型
int age2 = Integer.parseInt(str2); //字符串转基本类型
int sum = calc(age1, age2);
String str3 = String.valueOf(sum); //基本类型转字符串
System.out.println("两个年龄之和是"+str3);
}
public static int calc(int a, int b) {
return a+b;
}
一:为什么使用StringBuffer和StringBuilder
二:两者有什么区别
三:代码示例
public static void main(String[] args) {
StringBuffer buffer = new StringBuffer(); // 在堆中分配内存
buffer.append("Hello"); //向堆中内存醉驾 Hello ,没有为这次append单独分配内存
buffer.append("world"); //向堆中继续追加 World ,没有为这次append单独分配内存
String res = buffer.toString(); // 调用toString方法转换为Stirng后才能使用
System.out.println(res);
}
powered by kaifamiao