public String(char value[])
的實現原理?分析public String replace(char oldChar, char newChar)
的實現原理,回答String的不可變性在該函數中如何體現?(重點)部分String源代碼:
使用private final char value[];
使用字符數組來保存數據
使用Arrays.copyOf(value, value.length);
函數參數爲(地址,目標大小),能夠把指定數組變化成指定大小java
public String replace(char oldChar, char newChar) { if (oldChar != newChar) { int len = value.length; int i = -1; char[] val = value; /*創建一個新字符用來保存String原來的各位元素*/ while (++i < len) { /*遍歷數組找到第一次出現oldchar的位置:i*/ if (val[i] == oldChar) { break; } } if (i < len) { char buf[] = new char[len];/*新建一個用於保存替換後結果的字符數組buf*/ for (int j = 0; j < i; j++) { buf[j] = val[j];/*將i位置前的字符全都複製進新數組buf*/ } while (i < len) { char c = val[i];/*循環將i位置後的字符複製進buf*/ buf[i] = (c == oldChar) ? newChar : c;/*若是遇到oldchar就向buf中添加newchar*/ i++; } return new String(buf, true); } } return this; } 遍歷String類對象內部實現的字符數組,而後用一個新的字符數組保存替換後的結果,並調用String的構造方法而return 一個新串 其實並非在原來的String上替換字符,是返回了一個替換了字符的新String,原來的String並無變 ,只是被咱們拋棄了 (見註釋)
String具備不變性而StringBuilder可變,若是用String的話每次拼接都會產生新String程序開銷很大
==比較的是是否爲同一個引用 .equals()方法能夠用來比較值
String str1 =「hi「, str2=「hi「; String str3 = new String(str1) System.out.println(str1==str2);
truec++
對於String類,以相同的字符串創建的String引用是同一個,由於String對象是惟一的算法
由於100是int類型,而int類型正式由Integer類包裝而來
Integer i1 = 127;Integer i2 = 127; i1 == i2;//true of false? Integer i1 = 128;Integer i2 = 128; i1 == i2;//true of false
分析:
Integer類具備靜態緩存,存儲 256 個特殊Integer對象,即128 到 127 之間的每一個值。
此時該語句就至關於
int i1=127;int i2=127;if(i1==i2)
而在這個範圍以外的值,Integer在該語句就表現爲一個正常的類了,故==比較的是引用,因此返回False小程序
在 ```com.ibm```包中編寫 StringUtil類,內有一方法 public static void foo1(){ System.out.println(StringUtil.class+" method:foo1"); } 在```edu.jmu```包中編寫Main類,其中掉了com.ibm.StringUtil的foo1方法
7.1 嘗試用命令行進行編譯並運行,截圖
目錄爲:D:\TestJavaTemp
api
javac -d . StringUtil.java //先編譯StringUtil類 javac -d . Main.java //再編譯Main類 java -cp . edu.jmu.Main //在文件目錄下運行Main類
7.2 將生成的StringUtil.class放到d:\lib下正確的目錄結構下,將Main.class放到d:\test下正確的目錄結構,嘗試在命令行下運行,並截圖。
數組
javac -d D:\lib StringUtil.java //將生成的StringUtil.class放到d盤的lib目錄下 javac -cp D:\lib -d D:\test.Main.java //將Main.class在d:\test目錄下 java -cp .;D:\test edu.jmu.Main //在d:\test目錄下運行Main類
7.3 Eclipse中源代碼放在哪一個目錄、class文件放在哪一個目錄?在Eclipse項目中按一下Ctrl+F11
就能夠直接運行Main,當按下Ctrl+F11時,到底在哪一個目錄下執行了什麼樣的java命令?緩存
在創建Project的時候選擇的目錄下的src目錄會有源代碼,bin目錄下是class文件 運行的是.class文件
技術基礎:
大一學過C語言的基礎,大二上和寒假粗略地學了c++描述的數據結構。大一剛開始學習c語言的時候因爲興趣寫了一些c語言+win32api的控制檯小遊戲,每一個長度大概爲300到800,加上不少奇怪的腦洞都用c寫過,c代碼量應該有數千吧。 大一暑假學了一點java當時也利用swing也作了個小遊戲
JAVA:
如今一週大概有34天的晚上都在作PTA,一週大概會寫PTA上一章的代碼量和本身課後學習的一點測試代碼。學習方式主要爲自學,遇到困難先分析原理,並藉助谷歌引擎,stackoverflow網站等學習
關於這門課的目標 :
熟練掌握基本語法,學習完以後能對OOP有更深入的理解,可以運用學到的知識製做出較爲完備的小程序,並進而學習javaee數據結構
問題: 3-身份證排序這題本身寫了自定義類Id的快速排序算法致使程序代碼很長
思考: 應該使用更爲簡潔的implements Comparable類就可使用自帶的sort函數了eclipse
問題: 4-動態數組和8-ArrayList入門屢次沒法經過
思考:應該是格式錯誤
解決方法:補充了多出空格後經過函數
問題:在 06-枚舉 這題時printGradeInfo
的Grade.class
一直返回class name=class main@Grade
解決方法:把枚舉類型放在類外