kotlinの「?」の意味が分からないので教えてください。

JSONObject?

 // 実行後
            override fun postExecute(result: JSONObject?) {
                if (result == null) {
                    return
                }
                try {
                    // 各 ATND イベントのタイトルを配列へ格納
                    val list = ArrayList<String>()
                    val eventArray = result.getJSONArray("data")

                    for (i in 0..eventArray.length() - 1) {
                        val eventObj = eventArray.getJSONObject(i)
                        val event = eventObj.getJSONObject("data")


                        list.add(event.getString("data"))
                    }

Kotlinの基本はここに記述されていますが、実例が少なく行き詰っています。
他に良いものがあれば教えください。