Объект
В Java существуют два типа типов: примитивные типы и типы объектов. Примитивы, такие как int
и boolean
, начинаются с маленьких букв; типы объектов начинаются с заглавных букв. Это различие полезно, потому что оно напоминает нам некоторые различия между ними:
Когда вы объявляете примитивную переменную, вы получаете存储空间 для примитивного значения. Когда вы объявляете переменную объекта, вы получаете место для ссылки на объект. Чтобы получить место для самого объекта, вы должны использовать оператор new
.
Если вы не инициализируете примитивную переменную, ей присваивается значение по умолчанию, которое зависит от ее типа. Например, 0
для int
и false
для boolean
. Значение по умолчанию для типов объектов - null
, что означает, что ссылка не ссылается на какой-либо объект.
Примитивные переменные хорошо изолированы в том смысле, что ничего не может быть сделано в одном методе, которое повлияет на переменную в другом методе. Переменные объектов могут быть трудными для работы, потому что они не так хорошо изолированы. Если вы передаете ссылку на объект в качестве аргумента, метод, который вы вызываете, может изменить объект, в этом случае вы увидите эффект. Конечно, это может быть хорошей вещью, но вы должны быть в курсе этого.
Если мы передаем примитивные переменные в метод (передача параметра по значению), мы фактически копируем значения примитивов и используем копии внутри метода. Все операции внутри метода работают с копиями; и вне метода значения примитивных переменных остаются не измененными. Однако, если мы передаем не примитивные объекты в метод (передача параметра по ссылке), мы передаем ссылки на переменные методу. Все операции на самом деле будут использовать и/или изменять исходные объекты.
Пример:
Напишите следующий код в файле /home/labex/project/objectTest.java
:
public class objectTest {
public static void main(String[] args){
// используем new для создания объекта массива с двумя элементами
int[] numbers = new int[2];
// присваиваем значения массиву объекта
numbers[0] = 1;
numbers[1] = 2;
// создаем примитивные переменные таким образом
int a = 1, b = 2;
// создаем тестовый объект
objectTest test = new objectTest();
test.changeInt(a, b);
System.out.println("Теперь a равно " + a + ", b равно " + b);
test.changeArray(numbers);
System.out.println("Теперь numbers содержит:");
for(int i : numbers){
System.out.print(i + "\t");
}
}
// определяем метод объекта, изменяющий значение int
public void changeInt(int a,int b){
a = 2;
b = 3;
System.out.println("В методе changeInt, a равно " + a + ", b равно " + b);
}
// определяем метод объекта, изменяющий значение массива
public void changeArray(int[] number){
for(int i = 0;i < number.length;i++){
number[i] = number[i]+1; // изменяем значение элемента массива, увеличивая его на 1
}
System.out.println("В методе changeArray, numbers содержит:");
for(int i : number){
System.out.print(i + "\t");
}
System.out.println();
}
}
Вывод:
Запустите файл objectTest.java
с использованием следующей команды в терминале:
javac /home/labex/project/objectTest.java
java objectTest
Посмотрите на вывод:
В методе changeInt, a равно 2, b равно 3
Теперь a равно 1, b равно 2
В методе changeArray, numbers содержит:
2 3
Теперь numbers содержит:
2 3
Есть еще одно отличие между примитивными и объектами. Вы не можете добавлять новые примитивы в Java (если вы не попадете в комитет по стандартам), но вы можете создавать новые типы объектов! Мы увидим, как это сделать в следующей главе.