Java language note

String myVar = "A string!";

var myVar = "A string!";

var list = new ArrayList();

var myNum = new Integer(123);

var myClassObj = new MyClass();
String[] stringArray = new String[10];

int[] intArray = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
Java 9 以前字符串每个字符在 JVM 中由两个字节表示 ( UTF-16 编码) 

 Java 9 开始如果字符串中都是 ISO-8859-1/Latin-1 则每个字符由一个字节表示


\r 回车 回到行首

\n 换行 切换到下一行


JVM 会维护一个 String , myString1  myString2 指向同一个对象 

String myString1 = "Hello World";
String myString2 = "Hello World";

如果想不指向同一个对象

String myString1 = new String("Hello World");
String myString2 = new String("Hello World");


String  Java 中是 immutable 意味着一旦创建就不能再改变

String one = "Hello";
String two = "World";
String three = one + " " + two;

实际是这样的
String three = new StringBuilder(one).append(two).toString();

所以多个字符串拼接时这样效率更高

String[] strings = new String[]{"one", "two", "three", "four", "five" };

StringBuilder temp  = new StringBuilder();
for(String string : strings) {
    temp.append(string);
}
String result = temp.toString();


replace  replaceAll 的区别

都可以替换所有匹配的字符串

replaceAll 能用正则匹配, replace 不能


String theString = "This is a good day to code";

byte[] bytes1 = theString.getBytes(); 用所在机器默认的编码 
byte[] bytes2 = theString.getBytes(Charset.forName("UTF-8"); 指定编码
类没有构造函数, 编译器会默认创建一个无参构造函数

类有参数构造函数后, 编辑器不会创建无参数构造函数, 需要自己手动创建无参数构造函数

子类的对象实例时,默认会先调用父类的无参数的构造函数

若父类未定义无参数构造函数,则在编译阶段报错。

子类调用了父类的有参构造函数,则可以通过编译和运行。