Оператор "+" для Java-классов

У меня есть класс вроде этого:

private static class Num {
    private int val;

    public Num(int val) {
        this.val = val;
    }
}

Можно ли добавить к объектам класса с помощью оператора "+"?

Num a = new Num(18);
Num b = new Num(26);
Num c = a + b;

Ответы

Ответ 1

Нет, вы не можете. + перегружается только для чисел, символов и String, и вам не разрешается определять какие-либо дополнительные перегрузки.

Есть один особый случай, когда вы можете объединить строковое представление любых объектов - если в первых двух операндах есть объект String, toString() вызывается для всех других объектов.

Вот иллюстрация:

int i = 0;
String s = "s";
Object o = new Object();
Foo foo = new Foo();

int r = i + i; // allowed
char c = 'c' + 'c'; // allowed
String s2 = s + s; // allowed
Object o2 = o + o; // NOT allowed
Foo foo = foo + foo; // NOT allowed
String s3 = s + o; // allowed, invokes o.toString() and uses StringBuilder
String s4 = s + o + foo; // allowed
String s5 = o + foo; // NOT allowed - there no string operand

Ответ 3

Нет. Java не поддерживает перегрузку оператора (для пользовательских классов).

Ответ 4

В java нет перегрузки операторов. Единственное, что поддерживается для объектов, - это конкатенации строк через "+". Если у вас есть последовательности объектов, соединенных через "+", и по крайней мере один из них является строкой, тогда результат будет привязан к созданию строки. Пример:

Integer a = 5;
Object b = new Object();

String str = "Test" + a + b;

будет привязан к

String str = new StringBuilder("Test").append(a).append(b).toString();