日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

程序员基本功05表达式中的陷阱

發布時間:2023/12/18 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 程序员基本功05表达式中的陷阱 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

你盡管去做,其他的交給天意:讀書筆記讀書筆記

1、Java字符串的特點

當程序使用字符串、基本類型包裝類實例是,盡量使用字符串直接量、基本類型值的直接量,避免通過new String()、new Integer()形式來創建字符串、基本類型包裝類實例。對于Java程序中的字符串直接量,JVM會使用一個字符串池來保護它們,當程序再次使用該字符串時,無需創建一個新的字符串。JVM在編譯時就可以確定字符串的值可以讓該字符串指向字符串池中對應的字符串;如果程序中使用了變量或調用看方法,那就只能等到運行時才能確定字符串的值,也就無法在編譯時確定字符串變量,從而無法使用JVM字符串池。如果字符串連接運算中所有變量執行了“宏替換”,那么JVM可以在編譯時就確定字符串表達式的值。

2、String、StringBuilder和StringBuffer

當一個string對象創建完成后,該string類包含的字符序列就被固定下來了,以后永遠不能變。因此如果程序需要一個字符序列會發生改變的字符串,考慮使用stringBuilder或StringBuffer。StringBuilder與StringBuffer的唯一區別是,StringBuffer是線程安全的,但效率會降低。在沒有多線程的情況下,首先使用StringBuilder。??

如果程序比較的是倆個字符串是否相同,用(==)就行了【比較倆個字符串引用變量是否指向同一個字符串對象】;但如果要判斷倆個字符串所包含的字符序列是否相同,則應該用String重寫過的equals方法進行比較。

3、表達式類型自動提升的陷阱

Java是一門強類型語言,強類型語言的倆個基本特征:所有變量不許聲明,然后才能使用,聲明變量時必須指定該變量的數據類型;一旦某個變量的數據類型確定下來了,那這個變量將永遠只能接受該類型的值。

當一個算術表達式中包含多個基本類型變量,整個算術表達式的數據類型將自動提升:byte、short和char將自動提升為int——》long——》float——》double。?

4、復合賦值運算符隱含的類型轉換

復合賦值運算包含一個隱式類型轉換:a+=5等價于a=(a的類型)(a+5),其于a=a+5不一樣。

復合運算有:+=、-=、*=、%=、<<=、>>=、>>>=、&=、

如果把+=當成字符串連接符使用,則+=運算符左邊的變量只能是String類型,不能是String的父類類型,如(object或CharSequence)。

5、輸入法導致的陷阱

基本上,如果在編譯時提示“非法字符串:\xxxxxx”的錯誤提示,可斷定程序中國包含“全角字符”,逐個刪除就行

6、必須使用合法的注釋字符

\u后面的4個字符必須是0-F。

7、慎用字符的Unicode轉義形式

\u000a是換行符,慎用

8、泛型中原始類型變量的賦值

當程序把一個原始類型的變量賦給一個帶泛型信息的變量時,總是可以編譯----只是會提示一些警告信息;如果只是簡單的輸出每個集合元素,并不涉及集合元素類型,程序不會出現異常 ;否則,程序要么編譯異常,要么運行異常。

當程序試圖訪問帶泛型聲明的集合的元素集合時,編譯器總是把集合元素當成泛型類型處理----它并不關心集合元素實際類型

當程序試圖訪問帶泛型聲明的集合的集合元素時,JVM會遍歷每個集合元素自動只從強制轉型,如果集合元素的實際類型與集合所帶的泛型信息不匹配,運行時將引發ClassCastException。

9、原始類型帶來的擦除

當把一個具有泛型信息的對象賦給另一個沒有泛型信息的變量時,所有尖括號之間的類型信息都將被丟棄。

10、Java不支持泛型數組

11、正則表達式中(.)匹配任意字符

split(string regex)、replaceAll(string regex,String replacement)、replaceFirst(String regex,String replacment)

“\\.”代表轉義,“\\\\”標識雙斜桿

12、不要調用線程對象的run方法

3種方法創建、啟動多線程:

繼承Thread類來創建線程類、重寫run()方法作為線程執行體;

實現Runnable接口來創建線程類,重寫run()方法作為線程執行體

實現Callable接口來創建線程類,重寫call()方法作為線程執行體。

第一種方式效果最差:線程繼承了Thread類,無法繼承其他父類;因為每條線程都是一個Thread子類實例,因此多個線程之間共享數據比較麻煩。

13、靜態同步方法的同步監視器是類

Java提供synchronized關鍵字用于修飾方法,使用synchronized修飾的方法被稱為同步方法。當然,還可以修飾普通代碼塊,被修飾的代碼塊稱為同步代碼塊。java規定,任何線程進入同步方法、同步代碼塊之前,必須先獲取同步方法、同步代碼塊對應的同步監視器。

14、多線程執行環境的線程安全問題

不考慮多線程環境的情況下,很多類代碼都是正確的,但一旦將它們放在多線程環境下,這個類就變得很脆弱,這種類稱為線程不安全,在多線程環境下,使用線程不安全的類是危險的。

使用synchronized關鍵字修飾方法,通過同步方法可以得到線程安全類。

總結

以上是生活随笔為你收集整理的程序员基本功05表达式中的陷阱的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。