#java #любой_язык
Стало интересно, можно ли заменить данный код как то покороче? без использования временной переменной Мне нужно по возвращению значения "сбрасывать" его же private static int a; a = ...; public static int foo() { int t = a; a = 0; return t; } Вопрос из разряда "как поменять числа местами без использования мат.операторов"
Ответы
Ответ 1
Не думаю что имеет смысл делать подобные "оптимизации", но можно еще так поизвращаться: public static int foo() { try { return a; } finally { a = 0; } }Ответ 2
Ваш код вполне норм, я только рекомендовал бы чуть расширить интерфейс до полноценного getSet: private static int v = 0; public static int getReset() { return getSet(0); } public static int getSet(int a) { int t = v; v = a; return v; } public static void main(String args[]) { v = 42; System.out.printf("%d, %d", getReset(), getReset()); } Однако, если мсье желает извращений, всегда можно выполнить нечто вроде: public static int getReset() { return v + (v=0); } public static int getSet(int a) { return v + (v=a)-a; } // Могут быть проблемы с переполнением, но могут и не быть, я не уверен :) Ну и классическое решение с атомарностью операции: private static final AtomicReferencev = new AtomicReference<>(); public static int getReset() { return getSet(0); } public static int getSet(int a) { return v.getAndSet(a); } public static void main(String args[]) { v.set(42); System.out.printf("%d, %d", getReset(), getReset()); } Ответ 3
private static AtomicInteger a = new AtomicInteger(...); public static int foo() { return a.getAndSet(0); }
Комментариев нет:
Отправить комментарий