为ä»ä¹Javaå符串æ¯ä¸å¯åçï¼
String å¯è½æ¯ Java ä¸ä½¿ç¨é¢çæé«çå¼ç¨ç±»åäºï¼å æ¤ String ç±»ç设计è å¯ä»¥è¯´æ¯ç¨å¿è¯è¦ã
æ¯å¦è¯´ String çä¸å¯åæ§ã
- String 类被 final å ³é®åä¿®é¥°ï¼æä»¥å®ä¸ä¼æåç±»ï¼è¿å°±æå³ç没æåç±»å¯ä»¥éåå®çæ¹æ³ï¼æ¹åå®çè¡ä¸ºã
- String ç±»çæ°æ®åå¨å¨
char[]æ°ç»ä¸ï¼èè¿ä¸ªæ°ç»ä¹è¢« final å ³é®å修饰äºï¼è¿å°±è¡¨ç¤º String å¯¹è±¡æ¯æ²¡æ³è¢«ä¿®æ¹çï¼åªè¦åå§å䏿¬¡ï¼å¼å°±ç¡®å®äºã
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];
}âå¥ï¼ä¸ºä»ä¹è¦è¿æ ·è®¾è®¡å¢ï¼âä¸å¦¹æäºä¸è§£ã
âæå ç®åæ¥è¯´ä¸ï¼ä¸å¦¹ï¼è½ææå¥½ï¼ä¸è½æåé¢åç»è¯´ãâ
第ä¸ï¼å¯ä»¥ä¿è¯ String 对象çå®å ¨æ§ï¼é¿å 被篡æ¹ï¼æ¯ç«åå¯ç è¿ç§éç§ä¿¡æ¯ä¸è¬å°±æ¯ç¨å符串åå¨çã
以䏿¯ä¸ä¸ªç®åç Java 示ä¾ï¼æ¼ç¤ºäºå符串çä¸å¯åæ§å¦ä½æå©äºä¿è¯ String 对象çå®å ¨æ§ã卿¬ä¾ä¸ï¼æä»¬å建äºä¸ä¸ªç®åç User ç±»ï¼è¯¥ç±»ä½¿ç¨ String ç±»åçåæ®µåå¨ç¨æ·ååå¯ç ãåæ¶ï¼æä»¬ä½¿ç¨ä¸ä¸ªéææ¹æ³ getUserCredentials ä»å¤é¨è·åç¨æ·åæ®ã
class User {
private String username;
private String password;
public User(String username, String password) {
this.username = username;
this.password = password;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
}
public class StringSecurityExample {
public static void main(String[] args) {
String username = "æ²é»çäº";
String password = "123456";
User user = new User(username, password);
// è·åç¨æ·åæ®
String[] credentials = getUserCredentials(user);
// å°è¯ä¿®æ¹ä» getUserCredentials è¿åçç¨æ·ååå¯ç å符串
credentials[0] = "鿏
æ¬";
credentials[1] = "612311";
// è¾åºåå§ User 对象ä¸çç¨æ·ååå¯ç
System.out.println("åå§ç¨æ·å: " + user.getUsername());
System.out.println("åå§å¯ç : " + user.getPassword());
}
public static String[] getUserCredentials(User user) {
String[] credentials = new String[2];
credentials[0] = user.getUsername();
credentials[1] = user.getPassword();
return credentials;
}
}å¨è¿ä¸ªç¤ºä¾ä¸ï¼å°½ç®¡æä»¬å°è¯ä¿®æ¹ getUserCredentials è¿åçå符串æ°ç»ï¼å³ç¨æ·ååå¯ç ï¼ï¼ä½åå§ User 对象ä¸çç¨æ·ååå¯ç ä¿æä¸åãè¿è¯æäºå符串çä¸å¯åæ§æå©äºä¿æ¤ String 对象çå®å ¨æ§ã
第äºï¼ä¿è¯åå¸å¼ä¸ä¼é¢ç¹åæ´ãæ¯ç«è¦ç»å¸¸ä½ä¸ºåå¸è¡¨çé®å¼ï¼ç»å¸¸åæ´çè¯ï¼åå¸è¡¨çæ§è½å°±ä¼å¾å·®å²ã
å¨ String ç±»ä¸ï¼åå¸å¼æ¯å¨ç¬¬ä¸æ¬¡è®¡ç®æ¶ç¼åçï¼åç»å¯¹è¯¥åå¸å¼ç请æ±å°ç´æ¥ä½¿ç¨ç¼åå¼ãè¿æå©äºæé«åå¸è¡¨çæ°æ®ç»æçæ§è½ã以䏿¯ä¸ä¸ªç®åç示ä¾ï¼æ¼ç¤ºäºå符串çåå¸å¼ç¼åæºå¶ï¼
String text1 = "æ²é»çäº";
String text2 = "æ²é»çäº";
// 计ç®å符串 text1 çåå¸å¼ï¼æ¤æ¶ä¼è¿è¡è®¡ç®å¹¶ç¼ååå¸å¼
int hashCode1 = text1.hashCode();
System.out.println("ç¬¬ä¸æ¬¡è®¡ç® text1 çåå¸å¼: " + hashCode1);
// 忬¡è®¡ç®å符串 text1 çåå¸å¼ï¼æ¤æ¶ç´æ¥è¿åç¼åçåå¸å¼
int hashCode1Cached = text1.hashCode();
System.out.println("ç¬¬äºæ¬¡è®¡ç®: " + hashCode1Cached);
// 计ç®å符串 text2 çåå¸å¼ï¼ç±äºåç¬¦ä¸²å¸¸éæ± çåå¨ï¼å®é
ä¸ text1 å text2 æååä¸ä¸ªå符串对象
// æä»¥è¿éç´æ¥è¿åç¼åçåå¸å¼
int hashCode2 = text2.hashCode();
System.out.println("text2 ç´æ¥ä½¿ç¨ç¼å: " + hashCode2);å¨è¿ä¸ªç¤ºä¾ä¸ï¼æä»¬å建äºä¸¤ä¸ªå ·æç¸åå 容çå符串 text1 å text2ã馿¬¡è®¡ç® text1 çåå¸å¼æ¶ï¼ä¼è¿è¡å®é 计ç®å¹¶ç¼å该å¼ã彿们忬¡è®¡ç® text1 çåå¸å¼æè®¡ç®å ·æç¸åå 容ç text2 çåå¸å¼æ¶ï¼å°ç´æ¥è¿åç¼åçåå¸å¼ï¼èä¸è¿è¡éæ°è®¡ç®ã
ç±äº String 对象æ¯ä¸å¯åçï¼å ¶åå¸å¼å¨å建åä¸ä¼åçååãè¿ä½¿å¾ String ç±»å¯ä»¥ç¼ååå¸å¼ï¼æé«åå¸è¡¨çæ°æ®ç»æçæ§è½ã妿 String æ¯å¯åçï¼é£ä¹å¨æ¯æ¬¡ä¿®æ¹æ¶é½éè¦éæ°è®¡ç®åå¸å¼ï¼è¿ä¼é使§è½ã
第ä¸ï¼å¯ä»¥å®ç°åç¬¦ä¸²å¸¸éæ± ï¼Java ä¼å°ç¸åå 容çå符串åå¨å¨åç¬¦ä¸²å¸¸éæ± ä¸ãè¿æ ·ï¼å ·æç¸åå 容çå符串åéå¯ä»¥æååä¸ä¸ª String 对象ï¼èçå å空é´ã
âç±äºå符串çä¸å¯åæ§ï¼String ç±»çä¸äºæ¹æ³å®ç°æç»é½è¿åäºæ°çå符串对象ãâçä¸å¦¹ç¨å¾®ç¼äºä¸ä¼åï¼æç»§ç»è¯´å°ã
âå°±æ¿ substring() æ¹æ³æ¥è¯´ãâ
public String substring(int beginIndex) {
if (beginIndex < 0) {
throw new StringIndexOutOfBoundsException(beginIndex);
}
int subLen = value.length - beginIndex;
if (subLen < 0) {
throw new StringIndexOutOfBoundsException(subLen);
}
return (beginIndex == 0) ? this : new String(value, beginIndex, subLen);
}substring() æ¹æ³ç¨äºæªååç¬¦ä¸²ï¼æç»è¿åç齿¯ new åºæ¥çæ°å符串对象ã
âè¿æ concat() æ¹æ³ãâ
public String concat(String str) {
int olen = str.length();
if (olen == 0) {
return this;
}
if (coder() == str.coder()) {
byte[] val = this.value;
byte[] oval = str.value;
int len = val.length + oval.length;
byte[] buf = Arrays.copyOf(val, len);
System.arraycopy(oval, 0, buf, val.length, oval.length);
return new String(buf, coder);
}
int len = length();
byte[] buf = StringUTF16.newBytesFor(len + olen);
getBytes(buf, 0, UTF16);
str.getBytes(buf, len, UTF16);
return new String(buf, UTF16);
}concat() æ¹æ³ç¨äºæ¼æ¥å符串ï¼ä¸ç®¡ç¼ç æ¯å¦ä¸è´ï¼æç»ä¹è¿åçæ¯æ°çå符串对象ã
âreplace() æ¿æ¢æ¹æ³å
¶å®ä¹ä¸æ ·ï¼ä¸å¦¹ï¼ä½ å¯ä»¥èªå·±ä¸ä¼çä¸ä¸æºç ï¼ä¹æ¯è¿åæ°çå符串对象ãâ
âè¿å°±æå³çï¼ä¸ç®¡æ¯æªåãæ¼æ¥ï¼è¿æ¯æ¿æ¢ï¼é½ä¸æ¯å¨åæçå符串ä¸è¿è¡çï¼èæ¯éæ°çæäºæ°çå符串对象ãä¹å°±æ¯è¯´ï¼è¿äºæä½æ§è¡è¿åï¼åæ¥çå符串对象并没æåçæ¹åãâ
âä¸å¦¹ï¼ä½ è®°ä½ï¼String å¯¹è±¡ä¸æ¦è¢«å建åå°±åºå®ä¸åäºï¼å¯¹ String 对象çä»»ä½ä¿®æ¹é½ä¸ä¼å½±åå°åæ¥çå符串对象ï¼é½ä¼çææ°çå符串对象ãâ
âå¯å¯ï¼è®°ä½äºï¼å¥ãâä¸å¦¹å¾ä¹ã
âé£ä»å¤©å°±å 讲å°è¿å§ï¼å颿们å对æ¯ä¸ä¸ªç»åé¢åæ·±å ¥å°å±å¼ä¸ä¸ãä½ å¯ä»¥æ¾ä¸äºèµæå é¢ä¹ ä¸ï¼æåºå»æ£ä¼å¿ãããããâ
GitHub 䏿 æ 10000+ ç弿ºç¥è¯åºãäºå¥ç Java è¿é¶ä¹è·¯ã第ä¸ç PDF ç»äºæ¥äºï¼å æ¬Javaåºç¡è¯æ³ãæ°ç»&å符串ãOOPãéåæ¡æ¶ãJava IOãå¼å¸¸å¤çãJava æ°ç¹æ§ãç½ç»ç¼ç¨ãNIOãå¹¶åç¼ç¨ãJVMççï¼å ±è®¡ 32 ä¸ä½åï¼500+å¼ æç»å¾ï¼å¯ä»¥è¯´æ¯éä¿ææãé£è¶£å¹½é»â¦â¦è¯¦æ æ³ï¼å¤ªèµäºï¼GitHub 䏿 æ 10000+ ç Java æç¨
å¾®ä¿¡æ æ²é»çäº ææ«æä¸æ¹äºç»´ç å ³æ³¨äºå¥çååå ¬ä¼å·æ²é»çäºï¼åå¤ 222 å³å¯å è´¹é¢åã

