These Kotlin multiple-choice questions and their answers will help you strengthen your grip on the subject of Kotlin. You can prepare for an upcoming exam or job interview with these 50+ Kotlin MCQs.
So scroll down and start answering.
A. Only abstract classes are inheritable by subclasses
B. Only abstract classes can inherit from multiple superclasses
C. Only abstract classes can have abstract methods
D. Only abstract classes can store state
A. The variable is named it
B. The variable is named this
C. The variable is named receiver
D. The variable is named default
A. Fun static main(){}
B. Fun main(){}
C. Fun Main(){}
D. Public static void main(){}
A. A do..while loop
B. A for loop
C. A while loop
D. A forEach loop
A. Task.join()
B. Task.abort()
C. Job.stop()
D. Task.cancel()
A. You must wrap all implicit conversion in a try/catch block
B. You can only assign Long to an Int, not the other way around
C. There is no implicit conversion from Int to Long
D. All integers in Kotlin are of type Long
A. Instanceof
B. Is
C. Typeof
D. As
A. FirstName?.let { println(
B. A null pointer exception is thrown
C. FirstName is equal to null
D. FirstName is equal to an empty string
E. FirstName is equal to Boolean false
A. Println(b!!.length ?: 0)
B. Println(b?.length ?: 0)
C. Println(b?.length ?? 0)
D. Println(b == null? 0: b.length)
A. ::removeBadValues
B. GlobalScope.removeBadValues()
C. Mainkt.removeBadValues
D. RemoveBadValues
A. for(z in 1..7) println("$z ")
B. for(z in 1..6) print("$z ")
C. for(z in 1 to 6) print("$z ")
D. for(z in 1..7) print("$z ")
A. An anonymous object
B. A static property
C. A companion object
D. A backing field
A. As?
B. ??
C. Is
D. As
A. In order to inherit from a class, it must be marked open
B. In order to inherit from a class, it must be marked public
C. In order to inherit from a class, it must be marked sealed
D. In order to inherit from a class, it must be marked override
A. Change()
B. Modify()
C. Set()
D. Assign()
A. Equals(), hashCode(), and toString()
B. Equals(), toHash(), and super()
C. Print(), println(), and toString()
D. Clone(), equals(), and super()
A. Object DatabaseManager {}
B. Singleton DatabaseManager {}
C. Static class DatabaseManager {}
D. Data class DatabaseManager {}
A. The subclass must be marked sealed
B. You must override the displayJob() method
C. You must mark the subclass as final
D. An abstract class cannot be extended, so you must change it to open
A. Obj.classInfo()
B. Obj.typeInfo()
C. Obj::class.simpleName
D. Obj::class
A. Val arrs[5]: Int
B. Val arrs = IntArray(5)
C. Val arrs: Int[5]
D. Val arrs = Array
A. Internal
B. Private
C. Public
D. Protected
A. == determines if two primitive types are identical. === determines if two objects are identical
B. == determines if two references point to the same object. === determines if two objects have the same value
C. == determines if two objects have the same value. === determines if two strings have the same value
D. == determines if two objects have the same value. === determines if two references point to the same object
A. Val max3 = a.max(b) (Extension Function is One of the idiomatic Solutions in Kotlin)
B. Val max = a > b ? a : b
C. Val max = if (a > b) a else b
D. If (a > b) max = a else max = b
A. Enum class Signal { OPEN, CLOSED, SENDING }
B. Println(Signal.SENDING.position())
C. Println(Signal.SENDING.hashCode())
D. Println(Signal.SENDING)
E. Println(Signal.SENDING.ordinal)
A. Delegates.watcher()
B. Delegates.observable()
C. Delegates.rx()
D. Delegates.observer()
A. Val name = null
B. Var name: String
C. Val name: String
D. Val name: String? = null
A. Val len = x?.let{x.len} else {-1}
B. Val len = x!!.length ?: -1
C. Val len:Int = (x != null)? x.length : -1
D. Val len = x?.length ?: -1
A. A.from(b)
B. A.range(b)
C. A.rangeTo(b)
D. A.to(b)
A. Y must be declared with var to be mutable
B. Y is an implicitly immutable value
C. Y can change only in a while loop
D. In order to change y, it must be declared outside of the loop
A. The sequence lacks a terminal operation.
B. The sequence is infinite and lacks an intermediate operation to make it finite.
C. The expression should begin with generateSequence(0).
D. The it parameter should be replaced with this.
A. Println(students.groupBy{ it.lastName }.count())
B. Println(students.groupBy{ it.lastName.first() }.fold().count())
C. Println(students.groupingBy{ it.lastName.first() }.count())
D. Println(students.groupingBy{ it.lastName.first() }.size())
A. .sortedByDescending()
B. .descending()
C. .sortedDescending()
D. .sort(
A. Lateinit var name: String // lateinit is modifier not delegate
B. Var name: String by lazy
C. Var name: String by Delegates.notNull()
D. Var name: String? = null
A. Delegates.vetoable()
B. Delegates.cancellable()
C. Delegates.observer()
D. Delegates.watcher()
A. Val sorted = fibonacci().skip(3).take(6).sortedDescending().toList()
B. Val sorted = fibonacci().skip(3).take(6).sortedByDescending().toList()
C. Val sorted = fibonacci().skip(3).limit(6).sortedByDescending().toList()
D. Val sorted = fibonacci().drop(3).take(6).sortedDescending().toList()
A. Val c = list of (a, b)
B. Val c = a + b
C. Val c = listOf(a+b)
D. Val c = listOf(*a, *b)
A. Replace !!. with ?.
B. Replace !!. with ?:.
C. Surround the line with a try/catch block.
D. Replace !!. with ?.let.
A. All of the properties are executed in order of appearance, and then the init blocks are executed.
B. The init blocks and properties are executed in the same order they appear in the code.
C. All of the init blocks are executed in order of appearance, and then the properties are executed.
D. The order of execution is not guaranteed, so code should be written accordingly.
A. Call the yield() function or check the isActive property.
B. Call the cancelled() function or check the isActive property.
C. Call the stillActive() function or check the isCancelled property.
D. Call the checkCancelled() function or check the isCancelled property.
A. Val mileage:Int = 566
B. Var mileage:Int = 566
C. Val mileage = 566 (Note: inferred)
D. Const int mileage = 566
A. Var longInt = 10L
B. Const long longInt = 10
C. Val longInt = 10L
D. Val longInt:Long = 10
A. Val myInt = toInt(binaryStr)
B. Val myInt = binaryStr.toInt(
C. Val myInt = binaryStr.toInt()
D. Val myInt = binaryStr.toInt(2)
A. Any program line can be marked with a label
B. Any statement can be marked with a label
C. Any expression can be marked with a label
D. Only the beginning of loops can be marked with a label
A. Default
B. Super
C. Any
D. Object
A. Add
B. Add Comparable
C. Add
D. Add
A. Final means that you cannot use interfaces with this class.
B. Final means that this is the only file that can use the class.
C. Final means that you cannot extend the class.
D. Final classes cannot be used in the finally section of a try/catch block.
A. Arrays use zero-based indexes. The value 3 is outside of the array's bounds
B. You accessed the element with an index but should have used.set().
C. You declared the array with val but should have used var
D. You cannot changes the value of an element of an array. You should have used a mutable list.
A. Each secondary constructor must call super().
B. Each secondary constructor must call base().
C. Each secondary constructor must directly or indirectly delegate to the primary.
D. Each secondary constructor must have the same name as the class.
A. It can be omitted only if an init block is defined.
B. It can be omitted anytime; it is not mandatory.
C. It can be omitted if secondary constructors are defined.
D. It can be omitted when the primary constructor does not have any modifiers or annotations.
A. Two.
B. None.
C. Four.
D. One.