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ì?
Trả lời
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
Đ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? –
@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
Tôi nghĩ rằng 'const' giá trị sẽ chỉ được hoàn toàn inlined trong biên dịch. –
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
- 1. Sự khác biệt giữa "const int & jj" và "int & const jj" là gì?
- 2. sự khác biệt giữa const và const {} trong javascript
- 3. sự khác biệt giữa/* ... */và là gì/** ... */
- 4. Sự khác biệt giữa định nghĩa var và val trong Scala là gì?
- 5. Sự khác biệt giữa const auto * và const auto?
- 6. Sự khác biệt giữa const và con trỏ dễ bay hơi trong C là gì?
- 7. Sự khác biệt giữa 'const ref' và 'in'?
- 8. Sự khác biệt giữa const. con trỏ và tham chiếu?
- 9. Sự khác biệt giữa toán tử của istream >> (double & val) giữa libC++ và libstdC++
- 10. Sự khác biệt giữa JavaBean và POJO là gì?
- 11. Sự khác biệt giữa betweeen% INC và @INC là gì?
- 12. Sự khác biệt giữa INTERSECT và WHERE IN là gì?
- 13. Sự khác biệt giữa RoutedCommand và RoutedUICommand là gì?
- 14. Sự khác biệt chính giữa Sinatra và Ramaze là gì?
- 15. Sự khác biệt giữa DBI và DBD là gì?
- 16. Sự khác biệt giữa NSInvocation và chặn là gì?
- 17. Sự khác biệt giữa fn và fn * là gì?
- 18. Sự khác biệt giữa xtype và bí danh là gì?
- 19. Sự khác biệt giữa build.sbt và build.scala là gì?
- 20. Sự khác biệt giữa localname và qname là gì?
- 21. Sự khác biệt giữa Event.target, Event.toElement và Event.srcElement là gì?
- 22. Sự khác biệt giữa ReplicaSet và ReplicationController là gì?
- 23. Sự khác biệt giữa glBindImageTexture() và glBindTexture() là gì?
- 24. Sự khác biệt giữa @noescape, @escaping và @autoclosure là gì?
- 25. Sự khác biệt giữa nhận và scanf là gì?
- 26. Sự khác biệt giữa Application.ThreadException và AppDomain.CurrentDomain.UnhandledException là gì?
- 27. Sự khác biệt giữa while (true) và loop là gì?
- 28. Sự khác biệt giữa dealloc và viewdidunload là gì?
- 29. Sự khác biệt giữa uint và System.UInt32 là gì?
- 30. Sự khác biệt giữa heuristic và thuật toán là gì?
https://kotlinlang.org/docs/reference/properties.html#compile-time-constants – Michael