| [ Web Proxy ] |
| Viewing: https://raw.githubusercontent.com/UserXSX/JavaGuide/main/docs/java/basis/java-basic-questions-02.md | [Back] [Original] |
[stringbuffer-methods.png]
****
`String` `String` `String` `StringBuffer` `StringBuffer` `StringBuilder` `StringBuffer` 10%~15%
****
- : `String`
- : `StringBuilder`
- : `StringBuffer`
### String ?
`String` `final` ~~`String` ~~
```java
public final class String implements java.io.Serializable, Comparable, CharSequence {
private final char value[];
//...
}
```
> `final` `final` `String` `final`
>
> `String`
>
> 1. `final` `String` /
> 2. `String` `final` `String`
>
> [ String - ](https://www.zhihu.com/question/20618891/answer/114125846)
>
> [issue 675](https://github.com/Snailclimb/JavaGuide/issues/675) Java 9 `String``StringBuilder` `StringBuffer` `byte`
>
> ```java
> public final class String implements java.io.Serializable,Comparable, CharSequence {
> // @Stable
> @Stable
> private final byte[] value;
> }
>
> abstract class AbstractStringBuilder implements Appendable, CharSequence {
> byte[] value;
>
> }
> ```
>
> **Java 9 `String` `char[]` `byte[]` ?**
>
> String Latin-1 UTF-16 Latin-1 Latin-1 Latin-1 `byte` (8 )`char` 2 16`byte` `char`
>
> JDK Latin-1
>
> 
>
> Latin-1 `byte` `char`
>
>
### + StringBuilder?
Java ++= String Java
```java
String str1 = "he";
String str2 = "llo";
String str3 = "world";
String str4 = str1 + str2 + str3;
```

+ `StringBuilder` `append()` `toString()` `String`
+** `StringBuilder` `StringBuilder` **
```java
String[] arr = {"he", "llo", "world"};
String s = "";
for (int i = 0; i < arr.length; i++) {
s += arr[i];
}
System.out.println(s);
```
`StringBuilder` `StringBuilder`

`StringBuilder`
```java
String[] arr = {"he", "llo", "world"};
StringBuilder s = new StringBuilder();
for (String value : arr) {
s.append(value);
}
System.out.println(s);
```

IDEA IDEA
JDK 9 + `makeConcatWithConstants()` `a+b+c` append StringBuilder JDK9 [JEP 280](https://openjdk.org/jeps/280) [StringBuilder](https://juejin.cn/post/7182872058743750715) [issue#2442](https://github.com/Snailclimb/JavaGuide/issues/2442)
### String#equals() Object#equals()
`String` `equals` String `Object` `equals`
###
**** JVM String
```java
// 1. "ab""ab"
// 2. "ab" aa
String aa = "ab";
// "ab" bb
String bb = "ab";
System.out.println(aa==bb); // true
```
[Java ](https://javaguide.cn/java/jvm/memory-area.html)
### String s1 = new String("abc");
1 2
1. "abc" 2 `ldc` `new String()` "abc"
2. "abc" 1 `new String()` "abc"
1 abc "abc" "abc"
JDK 1.8
```java
String s1 = new String("abc");
```
```java
// String
// #2 java/lang/String
// java/lang/String
0 new #2
// String
//
3 dup
// JVM "abc"
// "abc"
// "abc" JVM
//
4 ldc #3
// "abc" String
// String "abc"
6 invokespecial #4
// String
9 astore_1
//
10 return
```
`ldc (load constant)` `ldc`
1. ****`ldc`
2. ****`ldc`
3. ****JVM
2abc 1 abc
JDK 1.8
```java
// abc
String s1 = "abc";
// 1 abc
String s2 = new String("abc");
```
```java
0 ldc #2
2 astore_1
3 new #3
6 dup
7 ldc #2
9 invokespecial #4
12 astore_2
13 return
```
7 `ldc` abc 0 `ldc` abc7 `ldc` abc
### String#intern ?
`String.intern()` `native` ()
1. **** `intern()` `String` `intern()`
2. **** `intern()` `intern()`
- `intern()`
- `intern()`
JDK 1.8 :
```java
// s1 "Java"
String s1 = "Java";
// s2 "Java" s1
String s2 = s1.intern();
// "Java" s3
String s3 = new String("Java");
// s4 "Java" s1
String s4 = s3.intern();
// s1 s2
System.out.println(s1 == s2); // true
// s3 s4
System.out.println(s3 == s4); // false
// s1 s4
System.out.println(s1 == s4); // true
```
### String +
`final` JDK1.8
```java
String str1 = "str";
String str2 = "ing";
String str3 = "str" + "ing";
String str4 = str1 + str2;
String str5 = "string";
System.out.println(str3 == str4);//false
System.out.println(str3 == str5);//true
System.out.println(str4 == str5);//false
```
> **** String `equals()` `String` `equals` `Object` `equals` `String` `equals` `==` IDEA `equals()`

** jvm **
Javac **(Constant Folding)** Java

Javac ()
`String str3 = "str" + "ing";` `String str3 = "string";`
- ( `byte``boolean``short``char``int``float``long``double`)
- `final`
- +\>>>
****
+ `StringBuilder` `append()` `toString()` `String`
```java
String str4 = new StringBuilder().append(str1).append(str2).toString();
```
`StringBuilder` `StringBuffer`
`final`
```java
final String str1 = "str";
final String str2 = "ing";
//
String c = "str" + "ing";//
String d = str1 + str2; //
System.out.println(c == d);// true
```
`final` `String`
`str2`
```java
final String str1 = "str";
final String str2 = getStr();
String c = "str" + "ing";//
String d = str1 + str2; //
System.out.println(c == d);// false
public static String getStr() {
return "ing";
}
```
##
- String#intern
- Java String
- R RednaxelaFX
| Web Proxy Viewer | New URL | Original Page |