#14 Java 基本データ型と参照型

  • このエントリーをはてなブックマークに追加
  • LINEで送る

 

UPSTARTSのぱみやすです

今回はJavaの「基本データ型と参照型のメモリの関係」をみていきます

 

はじめに、基本データ型と参照型の違いを見ていきましょう

 

基本データ型

まずは基本データ型ですが、「boolean」「byte」「char」「short」「int」「float」「long」「double」の8つがあります

こちらの例を見て下さい

 

「a」に「5」を代入し、「b」に「a」を代入し、「b」に「7」を代入します

実行して表示させてあげると、「a」が 「5」で、「 b」は「 7」 と表示されます

こちらは直感的にわかると思います

 

参照型

では次に参照型をみていきましょう

参照型は先ほど説明した基本データ型の8つ以外になります

主に「String」「配列」「class」などがあります

それでは今回は配列を例にしてみます、 こちらの例を見てください

 

先ほどと同様に「a」に「5」を代入し、「b」に「a」を代入し、「b」に「7」を代入します

基本データ型では、「a」が 「5」で、「 b」は「 7」 と表示されましたが、

今回は「a」と「b」の両方とも「 7」と表示されます

 

メモリの関係

なぜこのようになるのかを別の画面でみてみます

 

ピンクはコンピューターのメモリだと思ってください

「0A01」や「0x01」は数値はメモリの番地だと思ってください

 

基本データ型

 

基本データ型から見ていきましょう

まず基本データ型では「int a」と変数が宣言された時点でメモリ上に「a」という領域を確保し、

そこに「5」という値を保持しています

 

「int b」も同じように領域が確保され、「b」に「a」が保持され、

 

その後「b」に「7」が代入され、「a」が「5」、「b」が「7」になります 

 

参照型

 

では次に参照型を見ていきましょう

参照型では「int[]a」と宣言すると配列の要素が何個がわからない為、 メモリ上にとりあえず「a」という領域を確保します

 

次に「a」に「5」を代入するのですが参照型の場合、 別の番地に領域が確保され、「a」には「5」が入っている番地(0x03)が代入されます

 

同じように「int[]b」もとりあえず領域が確保され、「b」に「a」を代入します

 

この時に、「b」には「a」の番地、要するに(0x03)が代入されるため、「 a」と「b」は同じ場所を参照していることになります

 

次に「b」に「7」を代入すると「0x03」番地が「7」に変わります

 

そうすると「a」と「b」はおなじところをみているので、「a」も「b」も「7」になります

 

こちらとてもややこしいのですが、とても重要なので区別できるよにしておいてください

 

String

 

また「String型」は参照型と説明しましたが、基本データ型と似たような動作になるように調整が加えられているので データ型と同じように使うことが出来ます

 

 

まとめ

 

次回はメッソドについてやっていきます


  • このエントリーをはてなブックマークに追加
  • LINEで送る