What is the Java equivalent of const?In C++, the const keyword can be used to force a variable or pointer to be read-only. As an example, let's suppose we have a struct declared as follows:
typedef struct Obj {
int ival;
struct Obj *next;
} OBJ;
Ordinarily, if we declare a variable of type OBJ or as being a pointer to an OBJ, there's nothing to stop us modifying the object's fields via that variable after declaration. However, if we declare either variable as const, then the fields of the object cannot be modified via that variable: const OBJ obj1; const OBJ *obj2; obj1.ival = 0; <-- NOT ALLOWED! obj1.next = 0; <-- NOT ALLOWED! obj2->ival = 0; <-- NOT ALLOWED! obj2->next = 0; <-- NOT ALLOWED! Note that const (a) doesn't really give us any guarantee about the modifiability of the actual object, just about whether a particular variable gives read-only access; (b) the read-only guarantee isn't applied recursively to fields inside the referred-to struct or object. So (a) we can create a new variable referring to the same struct that "casts away" the const operator, then use that variable to modify the struct; and (b) we can change obj2->next->next even if we can't change obj2->next. So the following code is allowed: const OBJ obj1; const OBJ *obj2; obj2->next->next = 0; OBJ *objRef = (OBJ *) obj2; objRef->next = 0; Const pointersA subtlety is that by changing the order of the modifiers, we can create a const pointer. In this case, the contents of the struct can be modified (via this pointer variable), but the actual pointer can't: OBJ* const obj; obj->next = 0; // Allowed obj = otherPtr; // Not allowed Const member functionsFinally, and perhaps less commonly, const can be used in C++ to indicate that a member function of a class has no side effects on the object it is applied to. (In effect, it is not allowed to modify any of the object's fields.) const in JavaOn the next page, we look at the equivalent of const in Java, showing that in some cases the final keyword provides similar functionality. But we see that in Java, access to object members is controlled by the class itself, so another workaround must be provided for giving read-only access to object members. Written by Neil Coffey. Copyright © Javamex UK 2008. All rights reserved. |