- 字符串和编码
- 字符串在
String内部是通过一个char[]数组表示的,因此,可以按下面的写法:String s2 = new String(new char[] {'H', 'e', 'l', 'l', 'o', '!'}); - Java字符串的一个重要特点就是字符串不可变。这种不可变性是通过内部的
private final char[]字段,以及没有任何修改char[]的方法实现的。 - Java编译器在编译期,会自动把所有相同的字符串当作一个对象放入常量池。
- 两个字符串比较,必须总是使用
equals()方法。 - 要忽略大小写比较,使用
equalsIgnoreCase()方法。 String还提供了isEmpty()和isBlank()来判断字符串是否为空和空白字符串。- 拼接字符串使用静态方法
join(),它用指定的字符串连接字符串数组。String[] arr = {"A", "B", "C"};String s = String.join("***", arr); // "A***B***C" - 字符串提供了
formatted()方法和format()静态方法,可以传入其他参数,替换占位符,然后生成新的字符串。1 public class Main {2 public static void main(String[] args) {3 String s = "Hi %s, your score is %d!";4 System.out.println(s.formatted("Alice", 80));5 System.out.println(String.format("Hi %s, your score is %.2f!", "Bob", 59.5));6 }7 } - 要把任意基本类型或引用类型转换为字符串,可以使用静态方法
valueOf()。1 String.valueOf(123); // "123"2 String.valueOf(45.67); // "45.67"3 String.valueOf(true); // "true"4 String.valueOf(new Object()); // 类似java.lang.Object@636be97c
new String(char[])创建新的String实例时,它并不会直接引用传入的char[]数组,而是会复制一份,所以,修改外部的char[]数组不会影响String实例内部的char[]数组,因为这是两个不同的数组。- 那我们经常使用的
UTF-8又是什么编码呢?因为英文字符的Unicode编码高字节总是00,包含大量英文的文本会浪费空间,所以,出现了UTF-8编码,它是一种变长编码,用来把固定长度的Unicode编码变成1~4字节的变长编码。通过UTF-8编码,英文字符'A'的UTF-8编码变为0x41,正好和ASCII码一致,而中文'中'的UTF-8编码为3字节0xe4b8ad。
- 字符串在
StringBuilder
- String虽然可以直接拼接字符串,但是,在循环中,每次循环都会创建新的字符串对象,然后扔掉旧的字符串。
- 为了能高效拼接字符串,Java标准库提供了
StringBuilder,它是一个可变对象,可以预分配缓冲区,这样,往StringBuilder中新增字符时,不会创建新的临时对象。 StringBuilder还可以进行链式操作。1 public class Main { 2 public static void main(String[] args) { 3 var sb = new StringBuilder(1024); 4 sb.append("Mr ") 5 .append("Bob") 6 .append("!") 7 .insert(0, "Hello, "); 8 System.out.println(sb.toString()); 9 }10 }- 查看
StringBuilder的源码,可以发现,进行链式操作的关键是,定义的append()方法会返回this,这样,就可以不断调用自身的其他方法。 - 对于普通的字符串
+操作,并不需要我们将其改写为StringBuilder,因为Java编译器在编译时就自动把多个连续的+操作编码为StringConcatFactory的操作。在运行期,StringConcatFactory会自动把字符串连接操作优化为数组复制或者StringBuilder操作。 public StringBuilder delete(int start, int end)
- StringJoiner
- StringJoiner(CharSequence delimiter)
- StringJoiner(CharSequence delimiter, CharSequence prefix, CharSequence suffix)
- 包装类型
- 自动装箱(Auto Boxing)
- 所有的包装类型都是不变类。
1 //源码2 public final class Integer { 3 private final int value;4 } 我们把能创建"新"对象的静态方法称为静态工厂方法。
Integer.valueOf()就是静态工厂方法,它尽可能地返回缓存的实例以节省内存。创建新对象时,优先选用静态工厂方法而不是new操作符。- 程序设计的一个重要原则:数据的存储和显示要分离。
处理无符号整型
JavaBean
class的定义都符合这样的规范:- 若干
private实例字段; - 通过
public方法来读写实例字段。// 读方法:public Type getXyz()// 写方法:public void setXyz(Type value)
boolean字段比较特殊,它的读方法一般命名为isXyz()。// 读方法:public boolean isChild()// 写方法:public void setChild(boolean value)
把一组对应的读方法(
getter)和写方法(setter)称为属性(property)。例如,name属性:- 对应的读方法是
String getName() - 对应的写方法是
setName(String) - 只有
getter的属性称为只读属性(read-only) - 只有
setter的属性称为只写属性(write-only枚举一个JavaBean的所有属性,可以直接使用Java核心库提供的Introspector。
- 对应的读方法是
1 import java.beans.*; 2 3 public class Main { 4 public static void main(String[] args) throws Exception { 5 BeanInfo info = Introspector.getBeanInfo(Person.class); 6 for (PropertyDescriptor pd : info.getPropertyDescriptors()) { 7 System.out.println(pd.getName()); 8 System.out.println(" " + pd.getReadMethod()); 9 System.out.println(" " + pd.getWriteMethod());10 }11 }12 }13 14 class Person {15 private String name;16 private int age;17 18 public String getName() {19 return name;20 }21 22 public void setName(String name) {23 this.name = name;24 }25 26 public int getAge() {27 return age;28 }29 30 public void setAge(int age) {31 this.age = age;32 }33 }
输出:
age
public int Person.getAge()
public void Person.setAge(int)
class
public final native java.lang.Class java.lang.Object.getClass()
null
name
public java.lang.String Person.getName()
public void Person.setName(java.lang.String)
- 若干
以上更新于 2020年12月25日 00:07:59,后续待更
原文转载:http://www.shaoqun.com/a/503918.html
olive:https://www.ikjzd.com/w/2025
custommade:https://www.ikjzd.com/w/2514
字符串和编码字符串在String内部是通过一个char[]数组表示的,因此,可以按下面的写法:Strings2=newString(newchar[]{'H','e','l','l','o','!'});Java字符串的一个重要特点就是字符串不可变。这种不可变性是通过内部的privatefinalcha
邮乐网购:邮乐网购
hunter:hunter
亚马逊PPC 终极干货指导书 实战技巧篇:亚马逊PPC 终极干货指导书 实战技巧篇
九寨沟图片 :九寨沟图片
亚马逊全球开店从入门到精通:亚马逊全球开店从入门到精通
没有评论:
发表评论