Java學習第三十八天<包裝類><String類><StringBuffer><StringBuilder>
阿新 • • 發佈:2022-04-15
包裝類
package chapter16.包裝類; public class WrapperType { public static void main(String[] args) { //父類object //boolean>Boolean //char>Character // Number子類 //byte>Byte //short>Short //int>Integer //long>Long //float>Float //double>Double //int >Integer jdk5以前是手動裝箱和拆箱 int n1=100; Integer integer = new Integer(n1); Integer integer1 = Integer.valueOf(n1); //Integer>int 手動拆箱 int i=integer.intValue(); //jdk5後自動裝箱拆箱 int n2=200; Integer integer2=n2;//底層仍是Integer.valueOf(n2); int n3=integer2;//底層仍用integer.intValue(); //其他包裝類用法一致 } }
package chapter16.包裝類; public class WrapperVSString { public static void main(String[] args) { //包裝類 Integer >> String Integer i=100; String str1=i+""; //方式1 不影響 i 的型別 String str2=i.toString(); //方式2 String str3=String.valueOf(i);//方式3 //String >> Integer String str4="12345"; Integer i2 =Integer.parseInt(str4);//方式1 Integer i3 =new Integer(str4); //方式2 } }
package chapter16.包裝類; //右鍵 show diagram 點m可看方法 public class WrapperMethod { public static void main(String[] args) { System.out.println(Integer.MIN_VALUE);//返回最小值 System.out.println(Integer.MAX_VALUE); System.out.println(Character.isDigit('a'));//判斷是否數字 System.out.println(Character.isLetter('a'));//判斷是否字母 System.out.println(Character.isUpperCase('a'));//是否大寫 System.out.println(Character.isLowerCase('a')); System.out.println(Character.isWhitespace('a'));//是否空格 System.out.println(Character.toUpperCase('a'));//轉大寫 System.out.println(Character.toLowerCase('A')); } }
package chapter16.包裝類; public class WrapperExercise { public static void main(String[] args) { Integer i=new Integer(1); Integer j=new Integer(1); System.out.println(i==j);//F new後物件不同 Integer m=1; Integer n=1;//底層Integer.valueOf(1) 閱讀原碼 在-128--127之間直接返回,否則new System.out.println(m==n);//T Integer x=128; Integer y=128;//超出範圍,會new System.out.println(x==y);//F Integer i9=127;//底層Integer.valueOf(127) Integer i10=new Integer(127); System.out.println(i9==i10);//F 一個是從cache裡拿的,一個是new的 Integer i11=127; int i12=127; System.out.println(i11==i12);//T 有基本資料型別判斷值是否相等 Integer i13=128; int i14=128; System.out.println(i13==i14);//T } }
String類
package chapter16.String類; public class String01 { public static void main(String[] args) { //String實現 介面 Serializable 可序列化:在網路中傳輸 // 介面 Comparable 物件可比較大小 //有屬性 private final char value[] 用於存放字串內容 value陣列是final類,一旦賦值地址不能修改(不能指向新的物件) 單個字元內容可修改 String a="abc"; String b="abc"; System.out.println(a.equals(b));//T 方法重寫,比較每個字元 System.out.println(a==b);//T //記憶體圖 System.out.println("==============================="); String c=new String("abc"); System.out.println(a.equals(c));//T 比較每個字元 System.out.println(a==c);//F 地址不同 System.out.println(a==c.intern());//T intern()返回常量池地址 System.out.println(c==c.intern());//F 一個指向堆 一個是常量池 地址不同 System.out.println("==============================="); Person p1 = new Person(); p1.name="xx"; Person p2 = new Person(); p2.name="xx"; System.out.println(p1.name.equals(p2.name));//T System.out.println(p1.name==p2.name);//T System.out.println(p1.name=="xx");//T System.out.println(p1.name.intern()=="xx");//T System.out.println(p1.name.intern()==p1.name);//T System.out.println("=============================="); String s1=new String("yy"); String s2=new String("yy"); String s3="y"+"y";//會優化成 String s3="yy"; 只建立一個物件 常量相加看池 System.out.println(s1==s2);//F 指向不同堆 System.out.println(s1==s3);//F System.out.println(s1.intern()==s3);//T System.out.println("==============================="); String e="hello"; String f="world"; String g=e+f;//g先指向堆中陣列物件,陣列再指向常量池“helloworld” 變數相加看堆 //共建立三個物件 String h="helloworld"; System.out.println(g==h);//F System.out.println(g.intern()==h);//T } } class Person{ public String name; }
package chapter16.String類; public class String02 { String str =new String("xx"); final char[] ch={'j','a','v','a'}; public void change(String str,char ch[]){ str ="java";//change裡的str直接指向常量池,不影響物件的str指向xx ch[0]='h';//change裡的ch指向了物件的ch,並修改了第一個值 } public static void main(String[] args) { String02 ex = new String02(); System.out.println(ex.ch);//java ex.change(ex.str, ex.ch); System.out.print(ex.str+"and");// “xx” + “and” System.out.println(ex.ch);//hava } }
package chapter16.String類; public class StringMethod { public static void main(String[] args) { String str1="hello"; String str2="Hello"; System.out.println(str1.equals(str2));//F 區分大小寫 System.out.println(str1.equalsIgnoreCase(str2));//T 不區分大小寫 System.out.println(str1.length());//5 System.out.println(str2.indexOf('e'));//1 找字元索引,找不到返回-1 System.out.println(str2.indexOf('y'));//-1 System.out.println(str1.substring(1));//ello 擷取制定索引位置後邊字串 System.out.println(str1.substring(1,3));//el [1,3)個字串 System.out.println(str1.indexOf("llo"));//2 第一次出現的索引 System.out.println(str1.lastIndexOf("lo"));//3 最後一次出現的索引 System.out.println(str1.indexOf("rr"));//-1 System.out.println(str1.toUpperCase());//HELLO 換成大寫 System.out.println(str2.toLowerCase());//hello 換小寫 System.out.println(str1.concat(str2));//helloHello 拼接 System.out.println(str1.replace('l','u'));//heuuo 將所有l換成u System.out.println(str1.replace("he","HH"));//HHllo 換字串 System.out.println("====================="); String[] s = str1.split("l");//以 l 為分隔符 將字串分隔為字串陣列 l變成空格回車 特殊字元首尾要加轉義符“\” for (int i = 0; i < s.length; i++) { System.out.println(s[i]); } System.out.println("====================="); char []chs=str1.toCharArray(); for (int i = 0; i < chs.length ; i++) {//轉化成字元陣列 System.out.println(chs[i]); } System.out.println("======================"); String a="jaui"; String b="jcty"; String c="ja"; String d="gh"; System.out.println(a.compareTo(b));//-2 從前往後比較字母大小,得到差值 System.out.println(a.compareTo(c));//2 前面字母一致,長度不一致,則是長度之差 System.out.println(a.compareTo(d));//3 System.out.println("======================="); String name="John"; int age =10; double score=98.3; char gender='男'; String info=String.format("我的名字是%s年齡%d,成績是%.2f性別是%c",name,age,score,gender);//佔位符填資訊 System.out.println(info); } }
StringBuffer
package chapter16.String類; public class StringBuffer01 { public static void main(String[] args) { //StringBuffer 的直接父類是 AbstractStringBuilder //StringBuffer 實現了 Serializable 即StringBuffer物件可序列化 //在父類AbstractStringBuilder中 有屬性 char[] value,不是final 存放字串內容,因此是存放在堆中 //StringBuffer 是final類 不能被繼承 //因為StringBuffer 字元內容是存在 char[] value中,增加的字元補上空的空間即可 不用每次更換地址(建立新物件)除非陣列空間不夠 StringBuffer stringBuffer = new StringBuffer();//建立一個容量為16的char[] 存放字元內容 StringBuffer stringBuffer1 = new StringBuffer(100);//可通過構造器指定空間大小 StringBuffer hello = new StringBuffer("hello");//給一個字串str建立StringBuffer char[]的大小就是 str+16 //String>StringBuffer String str="hello tom"; StringBuffer stringBuffer2 = new StringBuffer(str);//方式1 返回StringBuffer物件,對str本身沒影響 StringBuffer stringBuffer3 = new StringBuffer(); stringBuffer3=stringBuffer3.append(str);//方式2 //StringBuffer>String StringBuffer stringBuffer4 = new StringBuffer("xx");//方式1 使用StringBuffer 提供的toString String s=stringBuffer4.toString(); //使用構造器來搞定 String s1=new String(stringBuffer4);//方式2 用構造器 } }
package chapter16.String類; public class StringBuffer02 { public static void main(String[] args) { StringBuffer s = new StringBuffer("hello"); //新增append s.append(','); s.append("張三丰"); s.append("趙敏").append(100).append(true).append(10.5);//轉成字元 System.out.println(s); //刪除 s.delete(11,14);//刪除[11,14)內容 System.out.println(s); s.replace(9,11,"哈哈");//替換[9,11)內容為哈哈 System.out.println(s); System.out.println(s.indexOf("張三丰"));//查詢字串第一次出現的索引 s.insert(9,"趙敏");//在索引9位置插入字串 System.out.println(s); System.out.println(s.length());//字串長度 } }
package chapter16.String類; public class StringBufferExercise01 { public static void main(String[] args) { String str=null; StringBuffer sb = new StringBuffer(); sb.append(str);//底層呼叫的是AbstractStringBuilder 的appendNull System.out.println(sb.length()); System.out.println(sb); } }
package chapter16.String類; import java.util.Scanner; public class StringBufferExercise02 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); StringBuffer sb = new StringBuffer(scanner.next()); for (int i=sb.lastIndexOf(".")-3; i>0; i-=3) {//先-3後判斷 不然會有最前面加, sb=sb.insert(i,","); } System.out.println(sb); } }
StringBuilder
package chapter16.String類; public class StringBuilder01 { public static void main(String[] args) { /* 1 繼承AbstractStringBuilder類 2.實現了Serializable, CharSequence 可序列化(網路傳輸,儲存到檔案) 3.是final類 不能被繼承 4.StringBuilder 物件字元序列仍然是存放在父類 AbstractStringBuilder 的 char[] value 因此字元序列存放堆中 5.StringBuilder 方法沒有做互斥處理,即沒有synchronized關鍵字 因此單執行緒情況下使用StringBuilder 效率最高 */ StringBuilder stringBuilder = new StringBuilder(); //使用同 StringBuffer } }