Operations on objects. The operation of assigning objects. Object comparison operations
Contents
- 1. What operations can be applied to objects in the Java programming language?
- 2. How does the assignment of objects = is realized? General form
- 3. What is the difference between assignment (=) variables of primitive types and objects assignment?
- 4. What errors can occur when take place the assignment of references to objects?
- 5. Examples of using the assignment operator = for assigning class objects
- 6. Is it possible to assign objects of different classes?
- 7. How does the operation of assigning objects containing nested objects work?
- 8. Object comparison operation ==. Example
- 9. Operation of object comparison !=. Example
- Related topics
Search other websites:
1. What operations can be applied to objects in the Java programming language?
The Java programming language provides a wide range of operations that can be used for primitive data types and for objects.
For objects, you can apply the following operations:
- assignment =;
- comparison operation ==;
- comparison operation !=.
2. How does the assignment of objects = is realized? General form
The assignment operation has the following general form:
obj1 = obj2;
here
- obj1, obj2 – reference to objects that have the same type (class). When assigning objects, the value of the reference to the object obj2 is assigned to the reference obj1. In fact, only references are assigned, that is, the reference is copied from one place to another. After assignment, both references refer to the same memory location.
3. What is the difference between assignment (=) variables of primitive types and objects assignment?
The difference between the assignment of variables of primitive types and objects is as follows:
- when assigning variables of primitive types, the value of one variable is copied to another. In this case, variables are placed in different parts of the memory. Changing the value of one variable will not change the value of another variable;
- when assigning objects, only the reference to the object is copied and not the value of this object. That is, after performing the assignment of objects, references to these objects point to the same memory location. After assignment, changing object data by one reference will result in changing object data by another reference, since object reference refer to the same memory location.
4. What errors can occur when take place the assignment of references to objects?
If during the assignment the reference to the object in the left part pointed to some previously allocated memory section (by the operator new), then this section may be lost if there is no copy of this reference. After assignment, it will be impossible to obtain information about the data from this site. Later this site will be automatically cleared by the garbage collector.
5. Examples of using the assignment operator = for assigning class objects
Example 1. Let a class named SomeClass be given
// some class class SomeClass { // internal data int d; float f; char c; // class constructor SomeClass(int d, float f, char c) { this.d = d; this.f = f; this.c = c; } }
The following shows the assignment of objects of this class and the demonstration of access to the same memory:
// creating object obj1 SomeClass obj1 = new SomeClass(5, 3.8f, 'z'); // declaration of obj2 object of class SomeClass, for which no memory is allocated SomeClass obj2 = null; // assignment of references to objects obj2 = obj1; // object references refer to the same memory location int d = obj2.d; // d = 5 d = obj1.d; // d = 5 float f = obj2.f; // f = 3.8 f = obj1.f; // f = 3.8 char c = obj2.c; // c = 'z' c = obj1.c; // c = 'z' obj1.d = 280; d = obj2.d; // d = 280 obj2.f = 7.777f; f = obj1.f; // f = 7.777
Example 2. Sort an array of objects using the insertion sort. The example demonstrates the exchange between references to an object of type Data.
A Data class is specified that contains one internal ‘value’ variable and an explanation of the message to it of type String. Implement data sorting in descending order of value using the insertion sort.
The implementation of the Data class is as follows:
// the declaration of Data class class Data { // class data int value; String message; // method that set a new values in class void Set(int val, String msg) { value = val; message = msg; } }
Using an array of objects of type Data may be, for example, the following
// object array declaration Data[] D = new Data[10]; // memory allocation for the entire Data array Data tmp; // additional reference of type Data // memory allocation for each object of array Data for (int i=0; i<D.length; i++) D[i] = new Data(); // filling an array with arbitrary values D[0].value = 5; D[0].message = "value = 5"; D[1].value = 3; D[1].message = "value = 3"; D[2].value = 7; D[2].message = "value = 7"; D[3].value = 8; D[3].message = "value=8"; D[4].value = 9; D[4].message = "value => 9"; D[5].value = 10; D[5].message = "value = 10"; D[6].value = 4; D[6].message = "value = 4"; D[7].value = 6; D[7].message = "value => 6 "; D[8].value = 7; D[8].message = "value = 7"; D[9].value = 2; D[9].message = "value = two"; // array sorting in descending order for (int i=0; i<D.length-1; i++) for (int j=i; j>=0; j--) if (D[j].value<D[j+1].value) { // swap - only object references are exchanged tmp = D[j]; // extra reference tmp is used D[j] = D[j+1]; D[j+1] = tmp; } // array output for (int i=0; i<D.length; i++) System.out.println("D["+i+"]: value = " + D[i].value + "; message " + D[i].message);
As can be seen from the above example, between the objects D[j] and D[j+1] there is an exchange of references to the class object, and not the data values of these objects. The use of references in this exchange is effective in the case when an instance of a class (object) contains a large amount of data. After all, the exchange of two references is much faster than the exchange of all class data.
The following result will be displayed:
D[0]: value = 10; message value = 10 D[1]: value = 9; message value => 9 D[2]: value = 8; message value=8 D[3]: value = 7; message value = 7 D[4]: value = 7; message value = 7 D[5]: value = 6; message value => 6 D[6]: value = 5; message value = 5 D[7]: value = 4; message value = 4 D[8]: value = 3; message value = 3 D[9]: value = 2; message value = two
If we implement data exchange in a class, the following sorting loop code will be longer than the previous one:
// This code runs more slowly String msg; int val; for (int i=0; i<D.length-1; i++) for (int j=i; j>=0; j--) if (D[j].value<D[j+1].value) { // swapping of these objects is slower val = D[j].value; D[j].value = D[j+1].value; D[j+1].value = val; msg = D[j].message; D[j].message = D[j+1].message; D[j+1].message = msg; }
6. Is it possible to assign objects of different classes?
No, it is not. When assigning objects of different classes, the Java compiler generates an error with the message:
Type mismatch: cannot convert from SomeClass to SomeClass2
7. How does the operation of assigning objects containing nested objects work?
At assignment of one object to other value of the reference is assigned. An object declared in a class is not affected by the assignment operation.
8. Object comparison operation ==. Example
When comparing objects, reference values are compared. The result of the comparison is true if the references have the same values, that is, they refer to the same object.
Let the DayWeek class be given to implement the day of the week.
// class DayWeek class DayWeek { int day; DayWeek(int day) { if ((day>=1)&&(day<=7)) this.day = day; } }
The following example compares objects of a class of type DayWeek. The result is set to true only when the values of the references to the objects of the class are equal.
DayWeek dw = new DayWeek(5); DayWeek dw2= null; boolean b; b = dw==dw2; // b = false dw2 = dw; // dw2 and dw are equal b = dw==dw2; // b = true // references to different memory areas DayWeek dw3 = new DayWeek(3); DayWeek dw4 = new DayWeek(3); if (dw3==dw4) b = true; else b = false; // b = false
9. Operation of object comparison !=. Example
Operation != (Not equal) returns false in the case when the value of references to class objects are different among themselves. The operation works just like the comparison operation for equality == of class objects.
Let the class Circle be given, which implements a circle on the coordinate plane
// a class that implements the circle class Circle { double x, y; double radius; // constructor Circle() { radius = 1; x = y = 0; } }
The following demonstrates how to use the != operation to compare objects.
// declaration of objects of Circle class Circle c1 = new Circle(); // c1 - reference to the object of class Circle Circle c2 = new Circle(); // c2 - reference to the object of class Circle c2.radius = 2.5; boolean b; b = c1!=c2; // b = true: c1 and c2 references have different values c2 = c1; b = c1!=c2; // b = false: references c1, c2 have the same values
Related topics
- Data types
- Arithmetic operations
- Logical operations. Operation of relation. Bitwise logical operations
- Assignment operation ‘=’. Ternary operation ?:. Priority of operations