Java – 演算子 – 文字列結合

文字列同士の結合

+演算子の左右のオペランドが文字列の時、演算子は文字列結合として機能する。

文字列以外との結合

数値との結合

左右のオペランドの何れか1つが文字列の時も文字列結合として機能し、他方のオペランドは文字列に変換された後に結合される。

以下は文字列と数値を+演算子で結んだ場合で、数値が文字列に変換されて結合される。左右とも数値の場合は、当然数値の加算演算子として機能する。

char型との結合

char型の場合も文字列として結合される。左右ともchar型の場合はchar同士の値の加算(以下の例では’a’ + ‘b’ = $61 + $62 = $C3 = 195)。

一般的のオブジェクトとの結合

+演算子のオペランドの1つが文字列で他方がそうでないとき、演算子は文字列でない方のオペランドの文字列表現を結合する。

たとえば配列同士の+演算子は定義されていないが、文字列と配列を+演算子で結ぶと配列の方が文字列表現(ハッシュ)になり、もう1法の文字列と結合される。

以下の例はtoString()が実装されたクラスのオブジェクトと文字列の結合例で、Listオブジェクトが文字列化された後に結合されている。

 

 

Java – 演算子 – 代入演算子

数値に対する代入演算子

a = b bの値をaに代入する
a += b a = a + bと等価
a -= b a = a ― bと等価
a *= b a = a * bと等価
a /= b a = a / bと等価
a %= b a = a % bと等価

+=など演算と代入を同時に行う演算子を複合代入演算子(compound assignment operator)と呼ぶ。複合代入演算子と対比する場合は、=を単純代入演算子(simple assignment operator)と呼ぶ。

代入演算子の左辺に置けるのは変数のみで、リテラルや式は置けない。

宣言文で使えるのは=のみで、+=などの複合代入演算子は使えない。

文字列に対する代入演算子

a = b aの内容をbに代入する
a += b aの文字列とbの文字列を結合した結果をaに代入する

左辺が変数でなければならない点、宣言文で+=が使えない点は数値に対する場合と同じ。

なお、左辺はString型の変数でなければならないが、右辺はString型のほかchar型でもよい。

 

MySQL – CSVファイルへのエクスポート

コマンド

以下のコマンドで、指定したテーブルのデータをCSVファイルに書きだす。

エラー対応

下記のようなエラーが出る場合。

グローバル変数を確認する。

この場合、表示されたディレクトリーにのみCSVファイルを書き込むことが可能なので、以下のように指定する。

結果のファイルdata.csvは/var/lib/mysql-filesディレクトリー下に保存される。

 

Java – InfinityとNaN

Infinity

実数のオーバーフローはInfinity

実数演算で最大値を超えるような演算をすると、結果がInfinityになる。最小値を下回る演算の場合は-InfinityInfinityのリテラルはない。

Infinityに対する数値の演算結果は直感的

Infinityに対して数値を加減乗除しても結果はInfinity。で、数学の∞と同じ。

数値からInfinityを減じると-InfinityInfinityで割ると0.0。lim[x→∞]と考えると直感的。

Infinity同士の演算

Infinity同士の加算・乗算はInfinityInfinity同士の減算・除算はNaN

Infinityと最大値

Infinityは実数の最大値より大きく、これと等しくはない。

Infinity同士の大小比較

InfinityInfinityと等しい。

Infinityの定数定義

Infinitydouble型とfloat型で定義されていて、それらの定数定義も準備されている。

double型とfloat型で、Infinity-Infinityはそれぞれ等しい。

NaN

計算結果が不定→NaN

実数演算でゼロ同士やInfinity同士の除算結果はNaN (Not a Number)になる。NaNのリテラルはない。

NaNを含む演算はNaN

NaNを含む四則演算の結果は全てNaN

NaN != NaN

NaN同士は互いに等しくない。大小関係は特定できない(>でも<でもない)。

NaNの定数定義

NaNdouble型とfloat型で定義されていて、それらの定数定義も準備されている。double型のNaNfloat型のNaNは等しくない(double型同士やfloat型同士と同じように)。

InfinityとNaN

InfinityNaNの演算結果はNaN

InfinityNaNは互いに等しくない。大小関係は特定できない(>でも<でもない)。

 

Java – プリミティブ型 – 最大値・最小値

概要

数値表現可能なプリミティブ型の最大値・最小値は、それぞれのラッパークラスの定数として定義されている。

WrapperClass.MAX_VALUE
WrapperClass.MIN_VALUE

整数型、実数型、文字型で、それぞれの意味が異なる。

整数型の最大値・最小値

整数型の最大値・最小値は、それぞれのビット長で表現可能な符号付整数の最大値(正数)、最小値(負数)。

byte型

short型

int型

long型

整数型のオバーフロー/アンダーフロー

整数型の最大値を超える演算や最小値を下回る演算をすると、その方の範囲内のビットパターンで表現される値になる。

実数型の最大値・最小値

実数型の最大値・最小値は整数型と異なり、次の値。

最大値
正の数で表現できる最大の数
最小値
正の数で表現できる絶対値が最も小さい数

したがって、負の領域で表現可能な最小値は最大値のマイナス、負の領域で表現可能な絶対値が最小の数は最小値のマイナスになる。

float型

double型

実数型のオーバーフロー/アンダーフロー

実数型の最大値を超える演算をするとInfinityまたは-Infinityになる。

実数型の最小値の絶対値を下回る計算をすると、0.0または−0.0になる。

文字型の最大値・最小値

char型

char型の最小値は文字コード0の文字、最大値は文字コード65535の文字。

文字型のオーバーフロー/アンダーフロー

char型の最大値を超える演算や最小値を下回る演算をすると、それで表現可能な整数型に変換される。

 

Java – 演算子 – 算術演算子

概要

算術演算子はbyte型~long型などの整数や実数(float型double型)を対象とした演算子で、文字型のcharも演算対象になる。

<単項演算子>

+a 正符号、意味はない
-a 負符号、正負反転
++a 参照前インクリメント
a++ 参照後インクリメント
--a 参照前デクリメント
a-- 参照後デクリメント

<二項演算子>

a + b 加算
a - b 減算
a * b 乗算
a / b 除算
a % b 剰余

単項演算子

+:正符号

数値リテラルや数値型変数の前に置く。正数・負数とも符号は変わらず、実質意味を持たない。

-:負符号

数値リテラルや数値型変数の前に置き、符号を反転させる。

符号演算子の連続

単項演算子は交互に連続して書くことができて、その結果は負符号’-‘が偶数回なら’+‘と同じ、奇数回なら’-‘と同じ結果になる。

ただしその中に--++のように連続した符号があると、インクリメント/デクリメント演算子と解釈されてエラーになる。

++/–:インクリメント/デクリメント

  • ++を変数の直前に書くと「変数が評価される前に」変数の内容が1増加する
  • ++を変数の後に書くと「変数が評価された後に」変数の内容が1減少する
  • 演算子と変数の間に空白が入ってもよい。

整数の例

以下の例では、演算子が前置された場合は表示前にインクリメント/デクリメントされ、後置された場合は表示後にインクリメント/デクリメントされる。

また、以下の例では二項演算子の項にインクリメント/デクリメント演算子を使った例。

 

上記の例をnの変化で表すと以下の様になる。

3(→4) + →5 – 5(→4) = 3(4)

実数の例

実数の場合も++で1.0増加、--で1.0減少になるが、計算誤差が出る。

char型の例

char型にも適用可能で、インクリメントで1文字進み、デクリメントで1文字戻る。

二項演算子

四則演算

四則演算は多言語と同じ記号で、整数・実数の関係も同じ。整数同士の演算は整数で桁数が多い方に自動的にキャストされ、2項のうちいずれかでも実数なら結果も実数になる。

+:加算

-:減算

*:乗算

/:除算

%:剰余

abで割った時の剰余(余り)をa % bで与える。実数表現でも整数商に対する剰余が計算される。

除数・被除数が小数部を持つ場合、整数商に対する剰余が実数で計算される。

除数・被除数が負数の場合は、商と剰余の以下の式から考える。

(1)    \begin{equation*} a / b = q, \; a \% b = r \quad \Leftrightarrow \quad a = b q + r \end{equation*}

たとえば以下のように。

(2)    \begin{equation*} -7 \% (-2) = -1 \quad \Leftarrow \quad -7 = -2 \times 3  - 1 \end{equation*}

 

ゼロによる除算

整数除算でゼロで割ると実行時例外となる。剰余も除算を行っているので同じ。

浮動小数点演算の場合にゼロで割ると例外にならず、結果はInfinityとなる。剰余計算の場合は結果はNaN

べき乗

べき乗の演算子はなく、必要ならMathpow()メソッドを使う。

 

MySQL – テーブルのカラムの変更

カラム名の変更

changeの場合

カラムの型の変更

changeの場合

ALTER TABLE … CHANGEで変更するが、新しいカラムでも現在のカラム名を指定する必要がある。

modifyの場合

 

MySQL – テーブルのカラムの削除

1つのカラムの削除

複数のカラムの削除

 

MySQL – テーブルへのカラムの追加

最後に追加

先頭に追加

指定したカラムの後に挿入

 

複数のカラムを追加

 

なお、複数カラムを特定のカラムの後に挿入する場合、ADD (...) afterではエラーになるため、以下のようなクエリーにする。

MySQL – 文字コード・照合順序

データベース

確認

データベースの文字コード設定と照合順序設定の確認方法。いずれも対象のデータベースをUSEで使っている状態で実行。

文字コード

SHOW VARIABLES LIKE 'char%';

照合順序

SHOW VARIABLES lIKE 'col%';

変数で一度に確認

SELECT @@character_set_database, @@collation_database;

変更

ALTER DATABASE test CHARACTER SET 文字コード COLLATE 照合順序;

テーブル

確認

SELECT TABLE_NAME, TABLE_COLLATION FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='テーブル名';

変更

ALTER TABLE test_table
CONVERT TO CHARACTER SET 文字コード
COLLATE 照合順序;