JavaとCの違い

java-c.png
q?_encoding=UTF8&ASIN=475611895X&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=lifeiscool01-22
q?_encoding=UTF8&ASIN=4873111196&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=lifeiscool01-22

C++,Javaそれぞれガチで学ぶなら上の二つでしょ!
私の持ってる本が上の2つなのですが、、amazonで調べるとJavaの方はなぜかもう絶版ですね。
プログラミング言語C++の方はC++言語を作ったBjarne Stroustrupさんが書いているのでガチなのは間違いないけど、
ちなみに名著Effective JavaではJava言語仕様 第3版が参照されてたりするけど、そっちを買った方がよかったのかなぁ、でも英語版だったらこのページにあったーー!

私は今までWindowsでVisual Studioを使ってc++のコードを書くのに慣れていた。
Androidで開発することになって、javaってどんなだっけ。。と混乱したのでまとめておく。

概観

Cはネイティブ言語なので作ったプログラムが早く動く。javaはVM(Virtual Machine)を介すので動作がC言語に比べて遅くなるという特徴がある。
私は、プログラミングを勉強した時、最初にjavaを学んで、その次にC言語を学んだが、順番を逆にすればよかったと思った。
javaはマシンのことに関して気をつけなければならないことが、使う側からはあまり見えないように隠されている。

書くコードの量としてはc++の方が多いと思う。
なぜなら、javaにはもともと用意されてる便利な関数が多いから。
しかし、私は自分で色々好きに設定できるc++の方が好きだ。

JavaとC++の違い

予約語・書き方編

項目 c++ java
ライブラリ #include import
クラスの継承 childClass:ParentClass childClass extends ParentClass
クラスの最後 }; } (;はいらない)
デストラクタ Class::~Class() 不要(自動的にやってくれる)
コンソール出力 #include <stdio.h> printf(""); System.out.println("");
文字列 string char* String のみでok
定数 const final

オブジェクト志向編

項目 c++ java
多重継承 Ok 禁止
メソッドのオーバーライド そのままでok @override
継承 公開継承非公開継承がある すべて公開継承

その他

項目 c++ java
ポインタ * & なし。だけど、クラスを初期化するときは常にnewする
charのサイズ 1byte 2byte
オブジェクト(型)のサイズ sizeof(型)=何byte 型.SIZE=何bit
演算子のオーバーロード 可能 不可能
構造体 struct public final classが構造体の代わりになる。1

配列編

配列のページにまとめました。

ライブラリ編

C++ Java 意味
algorithm Arrays 配列を便利に扱うライブラリ

数値編

javaでは、unsigned intとか、unsigned shortなどは使えない。

項目 c++ java
char型 1byte -128~127 2byte 0~655352
unsigned char型 1byte 0~255 unsignedという修飾子は存在しない
byte型 1byte -128~127 1byte -128~127
short型 2byte -32768~32767 2byte -32768~32767
unsigned short型 2byte 0~65535 unsignedという修飾子は存在しない

Primitive Data Types-The java tutorials

各型の最大値・最小値

c++ではlimits.hをインクルードする必要がある
浮動小数点を扱うときはfloat.hをインクルードする必要がある

項目 c++ java
byte Byte.MAX_VALUE(127)
Byte.MIN_VALUE(-128)
char SCHAR_MIN(-128)3 Character.MIN_VALUE(\u0000)4
SCHAR_MAX(127) Character.MAX_VALUE(\uFFFF)
unsigned char UCHAR_MAX(255)
short型 SHRT_MAX(32767) Short.MAX_VALUE(32767)
SHRT_MIN(-32768) Short.MIN_VALUE(-32768)
unsigned short USHRT_MAX(65535) Characerと同じ
int INT_MIN(-2147483648) Integer.MIN_VALUE(-2147483648)
INT_MAX(2147483647) Integer.MAX_VALUE(2147483647)
unsigned int UINT_MAX(-1)=0xffffffff5
long LONG_MIN(-214748368) Long.MIN_VALUE(-9223372036854775808)
LONG_MAX(214748367) Long.MAX_VALUE(9223372036854775807)
unsigned long int ULONG_MAX(-1=0xffffffff)
long long int (8byte) LLONG_MIN(0)
LLONG_MAX(-214748368=0xffffffffffffffff6) 7
unsigned long long ULLONG_MAX(-1=0xfffffffffffffff8)
float FLT_MIN(2.225074e-038) Float.MIN_VALUE(1.4E-45)
FLT_MAX(3.402823e+308) Float.MAX_VALUE(3.4028235E38)
double DBL_MIN (2.225074e-308) | Double.MIN_VALUE( 4.9E-324)
DBL_MAX(1.797693e+308) Double.MAX_VALUE(1.7976931348623157E308)

用語編

Java C++
ジェネリック型 テンプレート型

オブジェクト指向用語編

java C++
メソッド 関数、ファンクション
インスタンス 実体
ポリモーフィズム インタフェース

References

wikipedia-JavaとC++の違い
Javaの文法(wikipedia)

Bibliography

サポートサイト Wikidot.com