Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is int type in Dart a value type or reference type?

Tags:

flutter

dart

The int type in Dart has default value of null. null is an object of type Null class. (as per Dart documentation). Also, in Dart, int derives from class Object. Hence,

int i = 10;
print(i.runtimeType is Object);   // returns true

This makes me believe that int is not a value type like in other languages (such as C#) but a reference type.

If I am correct, then- int i = 10; means i is a reference variable holding the reference to an int object 10.

Is this correct? If not, I would appreciate if a link to the description in the documentation is shared. Till now, I've been unable to find any proper explanation and hence have come to this conclusion myself. Thanks.

like image 615
user2549980 Avatar asked Jul 01 '20 10:07

user2549980


People also ask

Is int value type or reference type?

int is a value type.

Is int a class in Dart?

An integer number. The default implementation of int is 64-bit two's complement integers with operations that wrap to that range on overflow. Note: When compiling to JavaScript, integers are restricted to values that can be represented exactly by double-precision floating point values.

How do you define int in darts?

In the Dart programming language, an integer is represented by the int keyword. As we may know, integers include whole numbers (i.e., non-decimal positive and negative numbers). For every integer, four bytes are allocated in the memory.

Is Dart by reference?

Dart does not support passing by reference. Dart is only passed by value, just like Java. Java also does not support reference passing.

Is int a reference type in Dart?

Yes, Dart's int type is a "reference type". Dart does not have value types at all, all values are instances of a class, including integers. (At least technically, function values makes their classes very hard to see.) Integers are immutable and pretends to be canonicalized .

What is a number in Dart programming?

Number: The number in Dart Programming is the data type that is used to hold the numeric value. Dart numbers can be classified as: The int data type is used to represent whole numbers. The double data type is used to represent 64-bit floating-point numbers.

Is variable variable_name a valid identifier in Dart programming language?

variable_name is a valid identifier in the dart programming language. If you assign an int variable with a double value, It throws Error: A value of type 'double' can't be assigned to a variable of type 'int'.. Dart does not convert automatically.

What is the default value of an uninitialized variable in Dart?

The default values for uninitialized variables of any data type in dart is null. Because everything else in dart is an object. What is Reference Variable? The reference variable reference to or point to the memory storage allocated for particular object created.


2 Answers

Yes, Dart's int type is a "reference type". Dart does not have value types at all, all values are instances of a class, including integers. (At least technically, function values makes their classes very hard to see.)

Integers are immutable and pretends to be canonicalized. If a and b are int values and a == b, then identical(a, b) is guaranteed to be true, so a and b looks like they are the same object, but it's unspecified whether that's because they really are the same object, or because identical just cheats and does == for integers.

That means that you can largely treat int as a "value type". Whether it is copied on assignment or parameter passing, or you are passing a reference to the same object, is impossible to tell apart. The language ensures that, because it allows the implementations to do whatever is more efficient. In practice, some integers are unboxed inside functions, some integers are stored as a value in the reference itself, and some are real objects. (That's also one of the reasons you can't use an Expando with an int).

(In the current Dart language, all types annotations are nullable, meaning that you can assign null to int x;. With the upcoming Null Safety feature, that changes. Types will only be nullable if you write them as such, so int x = 1; would not accept a null value, but int? x; would. And null is an object too, the only instance of the class Null.)

like image 78
lrn Avatar answered Oct 17 '22 10:10

lrn


int is a value type in the sense that if you pass int value into a function and change the value of a parameter inside function, it won't affect outer scope.

void add(int inner) {
  inner += 1;
}

int outer = 0;
add(outer);
print(outer); // 0, unchanged

But int is still a class even though its name starts from lowercase letter. There was a huge discussion about its naming and lots of people consider it an inconsistency.

like image 3
Andrey Ozornin Avatar answered Oct 17 '22 09:10

Andrey Ozornin