20162308 2016-2017-2 《程序設計與數據結構》第2周學習總結


20162308 2016-2017-2 《程序設計與數據結構》第2周學習總結

教材學習內容總結

  1. Java 的字符串
  2. print & println 方法
  3. Java 的基本數據類型
  4. 讀取輸入數據

教材學習中的問題和解決過程

  • 為什么Java不同於 C, C++ 等語言,String 和 Int 兩種數據類型可以直接相加,而不用轉換數據類型?
  • 在cnblog上找到的這篇博客很精確地解釋了這個現象。我把這個理解為Sun公司為Java語言添加的語法糖。因為所有的類都是由Object類繼承的,而Object類中加入了toString()方法,所以讓所以的非String對象在於String對象相加時,會自動執行toString方法,轉化為String類型,進行字符串的連接。
  • 在上面這篇博客中看到了 StringBuffer 類型和 StringBuilder 類型, 和String 類型有什么區別?
  • 參考了這篇博客。感覺String類型跟這兩個比,絲毫沒有優勢啊。String 類型定義的是一個字符串常量,也就是說每一次賦值,都會生成一個新的字符串,然后比這個變量的地址轉到新的字符串上,而不是直接在內存上修改,並且String類型不是線程安全的,只適合單線程環境下使用。StringBuffer 類型是直接在內存上修改,所以相對來說效率更高,並且StringBuffer類型是線程安全的。StringBuilder 類型總的來說跟StringBuffer差不多,但是他沒有線程鎖,所以只適用於單線程下,因為減少了線程鎖對性能的開銷,效率比StringBuffer還要高。
  • 好了,由第二個問題,又有了第三個問題,既然這樣看來String類型相對另外兩種類型來說,效率較低,那么我們為什么還會在代碼中廣泛的是用String類型?
  • 看到這篇問答在生產環境中String類型確實會避免使用。不過按照第一個答主的說法,在JDK編譯器中,已經將String轉化為StringBuilder進行操作了。所以實際上
    String temp = "ABC" + 200 + 'D';
    與下面的代碼是等價的
    String temp = new StringBuilder().append( "ABC" ).append( 200 ).append('D').toString();
    但是當涉及到for循環的連加是,JDK是在每一次循環中,實例化一個StringBuilder,效率仍然會遠低於直接使用StringBuilder。所以其實還不如就直接使用StringBuilder。

代碼調試中的問題和解決過程

  • PP2.2中打印平均數中只能打印出整數。
  • 一開始是這樣寫的:
    double aver = (num1 + num2 + num3)/3;
    System.out.printf("%.3f",aver); //輸出:x.00,即無法輸出准確值
    //后來改成下面這樣
    double aver = (num1 + num2 + num3)/3.0;
    System.out.printf("%.3f",aver);//解決!

代碼托管

  • 代碼提交過程 & 代碼量截圖:

上周考試錯題總結

  • 這次終於拿了5分,但是感覺還是不夠。因為這次的5分就是打了一個擦邊球,錯了三題,錯的也都是老師上課講過的知識點,有點可惜。希望下次能夠有更好的表現。

其他(感悟、思考等,可選)

  • 在問題中發現問題,在進步中再次進步。

    這周收獲最大的就是對String有了更深入的研究。而這一開始,只是因為我想要直到為什么String可以和Int類型直接進行運算。在尋找答案的過程中,不知不覺地,發現了更大的世界。

    從String類型的理解,到StringBuffer和StringBuilder類型的引入,再到性能上的比較,這種自發性的學習過程實際上是很讓人血脈賁張的,在這種狀態下,學習成為一件既具有幸福感的事。

    反過來說,每一個人的學習都是自己的事,碰到問題寄希望於求助往往是事倍功半、效率極低的方法,不妨利用現在極其發達的搜索引擎,網上很多從業者的說法,往往具有更多的價值和意義。這也就是我不喜歡找老師答疑的原因。發現一個問題是很可貴的,自己去解決這個問題的過程會比解決問題本身更能夠引導我們向知識的縱深走去。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一周 26/26 1/1 7/7
第一周 81/107 1/2 8/15 String類型的使用
  • 計划學習時間:5小時

  • 實際學習時間:8小時

  • 改進情況:關於String的學習收獲很多

參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM