29 марта 2012 г.

java, linux: установка oracle jdk и JAVA_HOME (на примере archlinux)

С тех пор, как SUN/Oracle Java выпилили из дистрибутивов, приходится руками качать и ставить. Вкратце.
Качаем дистрибутив JDK под нашу архитектуру, например, в виде bin-файла. Даём ему права +x, запускаем в /opt (здесь и далее всё от рута), распаковывается в каталог /opt/jdk1.6.0_31.
Для удобства делаем ссылки прямиком на jdk и jre, чтобы потом легко заменять версии:
ln -s jdk1.6.0_31 jdk
ln -s jdk/jre jre
Далее надо настроить переменные окружения. Прописываем в /etc/profile:
export JDK_HOME="/opt/jdk"
export JAVA_HOME="/opt/jdk"
export PATH=$PATH:$JDK_HOME/bin
Если ставим только JRE отдельно, то JDK_HOME не нужна, а JAVA_HOME указывается на корень JRE. В случае JDK лучше JAVA_HOME настраивать на корень JDK, и в PATH добавлять лучше именно bin от JDK.

21 марта 2012 г.

Битовые сдвиги и приведения в Java: подводные камни

1. Операции сдвига

Сначала вкратце самые основы. Как известно, в Java все примитивные типы знаковые, и есть несколько вариантов побитовых операций сдвига:
  • >> сдвиг вправо
  • << сдвиг влево
  • >>> сдвиг вправо («беззнаковый»)
Как видно, в дополнение к классическим сдвигам есть также «беззнаковый» сдвиг, который игнорирует знаковый левый бит и сдвигает его как обычный. Также эти сдвиги называются, соответственно, логический (когда первый бит теряется а последний заполняется нулём) и арифметический (аналогично, но значение считается значением в дополнительном коде и последний бит (знаковый) сохраняет своё значение).