不是。Java 中的基本數據類型只有 8 個:byte、short、int、long、float、double、char、boolean;除了基本類型(primitive type)外,剩下的都是引用類型(reference type)
1)String是只讀的字符串,因此String引用的字符串內容是不能被改變的。
String str = "abc";
str = "bcd";
如上,第一行str 僅僅是一個引用對象,它指向一個字符串對象“abc”。第二行代碼的含義是讓 str 重新指向了一個新的字符串“bcd”對象,而“abc”對象并沒有任何改變
2)StringBuffer/StringBuilder 表示的字符串對象可以直接進行修改。
3)StringBuilder 是 Java5 中引入的,它和 StringBuffer 的方法完全相同,區別在于它是在單線程環境下使用的,因為它的所有方法都沒有被 synchronized 修飾,因此它的效率理論上也比 StringBuffer 要高。
不一樣,因為內存的分配方式不一樣。String str = "i"的方式JVM會將其分配到常量池中,而 String str = new String("i")JVM會將其分配到堆內存中。
String 類是final類,不可以被繼承。
補充:繼承String本身就是一個錯誤的行為,對String類型最好的重用方式是關聯關系 (Has-A)和依賴關系(Use-A)而不是繼承關系(Is-A)。
兩個對象,一個是靜態存儲區的"xyz",一個是用 new 創建在堆上的對象。
indexof();返回指定字符的的索引。
charAt();返回指定索引處的字符。
replace();字符串替換。
trim();去除字符串兩端空格。
splt();字符串分割,返回分割后的字符串數組。
getBytes();返回字符串byte類型數組。
length();返回字符串長度。
toLowerCase();將字符串轉換為小寫字母。
toUpperCase();將字符串轉換為大寫字母。
substring();字符串截取。
equals();比較字符串是否相等。
數組沒有 length()方法,有 length 的屬性。String 有 length()方法。JavaScript 中,獲得字符串的長度是通過 length 屬性得到的,這一點容易和 Java混淆
String s1 = "你好"; String s2 = newString(s1.getBytes("GB2312"), "ISO-8859-1");
首先會判斷要比較的兩個字符串它們的引用是否相等。如果引用相等的話,直接返回 true ,不相等的話繼續下面的判斷,然后再判斷被比較的對象是否是 String 的實例,如果不是的話直接返回 false,如果是的話,再比較兩個字符串的長度是否相等,如果長度不想等的話也就沒有比較的必要了;長度如果相同,會比較字符串中的每個 字符 是否相等,一旦有一個字符不相等,就會直接返回 false。
用遞歸實現字符串反轉,代碼如下所示:
public static String reverse(String originStr) {
? if(originStr == null || originStr.length() <= 1)
? return originStr;
? return reverse(originStr.substring(1)) + originStr.charAt(0);
}
string.substring(from):相當于從from位置截取到原字符串末尾
charAt() 方法用于返回指定索引處的字符。索引范圍為從 0 到 length() - 1。
public String[] split(String str, int chars){
int n = (str.length()+ chars - 1)/chars;
String ret[] = new String[n];
for(int i=0; i<n; i++){
if(i < n-1){
ret[i] = str.substring(i*chars , (i+1)*chars);
}else{
ret[i] = str.substring(i*chars);
}
}
return ret;
}
代碼如下:
public String subString(String str, int subBytes) {
int bytes = 0; // 用來存儲字符串的總字節數
for (int i = 0; i < str.length(); i++) {
if (bytes == subBytes) {
return str.substring(0, i);
}
char c = str.charAt(i);
if (c < 256) {
bytes += 1; // 英文字符的字節數看作 1
} else {
bytes += 2; // 中文字符的字節數看作 2
if(bytes - subBytes == 1){
return str.substring(0, i);
}
}
}
return str;
}
package test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
public class RandomSort {
public static void printRandomBySort() {
Random random = new Random(); // 創建隨機數生成器
List list = new ArrayList(); // 生成 10 個隨機數,并放在集合 list 中
for (int i = 0; i < 10; i++) {
list.add(random.nextInt(1000));
}
Collections.sort(list); // 對集合中的元素進行排序
Iterator it = list.iterator();
int count = 0;
while (it.hasNext()) { // 順序輸出排序后集合中的元素
System.out.println(++count + ": " + it.next());
}
}
public static void main(String[] args) {
printRandomBySort();
}
}
public int countWords(String file, String find) throws Exception {
int count = 0;
Reader in = new FileReader(file);
int c;
while ((c = in.read()) != -1) {
while (c == find.charAt(0)) {
for (int i = 1; i < find.length(); i++) {
c = in.read();
if (c != find.charAt(i))
break;
if (i == find.length() - 1)
count++;
}
}
}
return count;
}