Kotlin中との違いを詳しく比較します。

2933 ワード

前言
多くの学生がKotlinを使い始めました。Java Null PointerExceptionに対する管理があると知っていますが、Kotlinでは?と全部Null PointerExceptionと関係がありますが、彼らの違いは何ですか?なぜ他の人が開発したプロジェクトに多くの「?」が現れましたか?私は読みましたが、疑問符のような顔をしています。
わからないなら百度に聞いてください。確かに違いを説明する人がいます。例えば:

これは入力です。と百度の最初の答えを検索して、確かにこの人が言ったのは間違いないです。しかし、KT(Ktlin)に触れたばかりの初心者には、この二つの意味を徹底的に理解するために中国語8級が必要だと思います。
まず二つの概念を述べます。
  • "?"変数名に追加すると、システムはどのような状況でも空のポインターに異常がありません。
  • "!"変数名に加えて、オブジェクトがnullであれば、システムに異常が発生します。
  • Javaで異常が発生して、KTに転化して、コンパイラは当然彼に異常を投げ出させます。Null PointerExceptionもそうです。
    だから文脈に合わせて見られます。加えて、Javaコードとは何の違いがあるのではないかと思いますが、このnullのところは勝手に異常が出ます。ですから、ほとんどの場合に使いますか?nullを検出しにきました。輪が来ません。登場ですある対象に対して空欄でない判断が必要で、異常がある場合のみ使用します。
    これから重点的に説明しましょうか?どう使いますか
    宣言対象の時に、クラス名の後に付いて、このクラスがnullであることが許されると表します。
    オブジェクトを呼び出した時、オブジェクトの後ろに付いていくと、nullプログラムだと見て見ぬふりをするという意味です。
    下記のコードのように:
    
    //         ,        
    var room: Room? = Room()
    
    private fun checkRoom() {
        //        ,        room   
        room = null
    
        //            ,          
        Log.d("TAG", "-->> room name = ${room?.roomName}")
    }
    
         ?   :
        //          room   !!,    room    null
    var room: Room = Room()
    
    private fun checkRoom() {
        //   null  room ,            
        room = null
        //                  ,           
        Log.d("TAG", "-->> room name = ${room.roomName}")
    }
    
    それで安全な書き方です。Kotlin null safetyの特性を表しています。
    KTの文法はとてもよくて、パラメーターを定義しても書きます。
    
    val room: Room? = Room()    //       room,  room    
    val room: Room? = null  //      ,  room    
    
    val room: Room = Room()   //      room,  room      
    val room = Room()   //         , KT        
    
    しかし、疑問符を加えると、プログラムは常にNull PointerExceptionの悩みから解放されます。次のコードを見ます。
    
     `   val roomList: ArrayList<Room>? = null
        if (roomList?.size > 0) {
            Log.d("TAG", "-->>      0")
        }
        `
    
    私達がlist.sizeを判断する時、コンパイラは私達に教えてくれます。size.co mpareTo(0)'which is not allowed on a nullable receiver'roomList?size."大体の意味は、roomListがnullの場合、そのsizeが戻ってくるのはnullですが、nullはintのサイズと比べてはいけないので、コンパイラはroomListと書くことを勧めています。size!!!>0です。
    そうです。コンパイラの提案で追加しました。この行のコードを実行します。roomListがnullの場合、必ず異常を報告します。だから外では、レイヤifをセットしないといけないのですか?null)このJavaのよくある語句は異常を避けることができますか?
    もちろんKotlinはプログラムにこのようなくどいコードが現れないので、対象Aを提供しました。オブジェクトBの表現は、Javaの条件式をキャンセルしますか?表式1:表式2という3元表現。
    ?対象A値がnullの場合、後の対象Bに戻るという意味です。
    
        `val roomList: ArrayList<Room>? = null
        val mySize= roomList?.size ?: 0  
    
    締め括りをつける
    これはKotlinの中についてですか?と違いの文章はここまで紹介しました。もっと関連のあるKtlinの中で?と違いの内容は私達の以前の文章を検索してください。または下の関連記事を引き続きご覧ください。これからもよろしくお願いします。