2016-06-02 22 views
60

Gần đây tôi đã đọc về từ khóa const và tôi rất bối rối! Tôi không thể tìm thấy bất kỳ sự khác biệt giữa nó và từ khóa val, tôi có nghĩa là chúng ta có thể sử dụng cả hai của chúng để tạo ra một biến bất biến, có bất cứ điều gì khác mà tôi đang thiếu?Sự khác biệt giữa "const" và "val" là gì?

+0

https://kotlinlang.org/docs/reference/properties.html#compile-time-constants – Michael

Trả lời

85

const s là hằng số thời gian biên dịch. Có nghĩa là giá trị của chúng phải được gán trong thời gian biên dịch, không giống như val s, nơi nó có thể được thực hiện trong thời gian chạy.

Điều này có nghĩa là, const s không bao giờ có thể được gán cho hàm hoặc bất kỳ hàm tạo lớp nào, nhưng chỉ cho một số String hoặc nguyên thủy.

Ví dụ:

const val foo = complexFunctionCall() //Not okay 
val fooVal = complexFunctionCall() //Okay 

const val bar = "Hello world"   //Also okay 
+1

Điều gì về một cái gì đó như thế này: 'const val foo =" Xin chào thế giới "' và 'val bar =" Xin chào thế giới "'? Họ có giống nhau không? –

+2

@MathewHany, ít nhất là không theo điều khoản của bytecode, xem: http://stackoverflow.com/questions/37482378/static-data-in-kotlin/37485356#37485356 – hotkey

+0

Tôi nghĩ rằng 'const' giá trị sẽ chỉ được hoàn toàn inlined trong biên dịch. –

9

Chỉ cần để thêm vào Luka của câu trả lời:

Compile-Time Constants

Thuộc tính giá trị trong số đó được biết đến tại thời gian biên dịch có thể được đánh dấu như hằng số thời gian biên dịch bằng cách sử dụng công cụ sửa đổi const. tính chất như vậy cần phải thực hiện đầy đủ các yêu cầu sau:

  • cấp cao nhất hoặc thành viên của một đối tượng
  • khởi tạo với một giá trị kiểu String hoặc một loại nguyên thủy
  • Không tùy chỉnh getter

Nguồn: Official documentation

Các vấn đề liên quan