アドレス
日本語 | 住所 |
英語 | address |
ふりがな | あどれす |
フリガナ | アドレス |
ものの位置を特定するための「住所」。
プログラミングでは、主に「変数の、メモリ上の位置」を示す値という意味で使用される。
通常、メモリは1バイトごとに整数値が割り振られている。この値が「アドレス」である。メモリ上に置かれた変数は、その場所をアドレスで特定することができる。
現在のOSは、「仮想メモリ」という、実行されたアプリケーションごとに「仮のメモリ」を用意する。仮想メモリは互いに独立しているため、たとえば「Exeファイルを2度実行する」場合、それぞれに仮想メモリが作られ、一方がもう一方の仮想メモリにアクセスすることはできない。つまりそれぞれの変数は不可侵である。
Javaでは、基本的に「アドレス」という概念は使用しない。
Javaでは、メモリ上の変数に直接アクセスするような処理は「してはいけない」からである。
Javaにおいてアドレスに当たるものは参照値である。new演算子でインスタンスを作成した際に返される参照値がアドレスの代わりだが、これは参照型変数で受け取ることでのみ使用でき、「整数値」として扱うことはできない。
一応、ObjectクラスのhashCode()メソッドでアドレスを取得することができるが、このアドレスの使い道はない。参照型変数に入れ直すことはできず、またこの値で直接メモリにアクセスすることもできない。また、多くのクラスがhashCode()メソッドをオーバーライドして「ハッシュコードの取得」という機能を実装しているため、アドレスを取得することはできない。
このように、Javaではアドレスという概念をプログラミングで使用することは希である。
C言語、C++言語では多用するものだが、その際の「危険性」故に、Javaでは封印されたと考えた方がいいだろう。
これとは別に、ネットワーク上の「住所」を示す場合もある。
その場合、「IPアドレス」や「URL」のことを指す。
プログラミングでは、主に「変数の、メモリ上の位置」を示す値という意味で使用される。
通常、メモリは1バイトごとに整数値が割り振られている。この値が「アドレス」である。メモリ上に置かれた変数は、その場所をアドレスで特定することができる。
現在のOSは、「仮想メモリ」という、実行されたアプリケーションごとに「仮のメモリ」を用意する。仮想メモリは互いに独立しているため、たとえば「Exeファイルを2度実行する」場合、それぞれに仮想メモリが作られ、一方がもう一方の仮想メモリにアクセスすることはできない。つまりそれぞれの変数は不可侵である。
Javaでは、基本的に「アドレス」という概念は使用しない。
Javaでは、メモリ上の変数に直接アクセスするような処理は「してはいけない」からである。
Javaにおいてアドレスに当たるものは参照値である。new演算子でインスタンスを作成した際に返される参照値がアドレスの代わりだが、これは参照型変数で受け取ることでのみ使用でき、「整数値」として扱うことはできない。
一応、ObjectクラスのhashCode()メソッドでアドレスを取得することができるが、このアドレスの使い道はない。参照型変数に入れ直すことはできず、またこの値で直接メモリにアクセスすることもできない。また、多くのクラスがhashCode()メソッドをオーバーライドして「ハッシュコードの取得」という機能を実装しているため、アドレスを取得することはできない。
このように、Javaではアドレスという概念をプログラミングで使用することは希である。
C言語、C++言語では多用するものだが、その際の「危険性」故に、Javaでは封印されたと考えた方がいいだろう。
これとは別に、ネットワーク上の「住所」を示す場合もある。
その場合、「IPアドレス」や「URL」のことを指す。
参考サイト
// Sample.java
public class Sample
{
public static void main( String[] args )
{
// ObjectクラスのhashCode()メソッドで、アドレスもどきを取得します。
Object object = new Object();
int hashCode = object.hashCode();
System.out.println( hashCode );
// 24529889
// この値が、「new Object()」によって作られたインスタンスが
// 置かれているメモリ上の「アドレス」です。
// この値はインスタンスごとに異なるため、呼ぶ度に値が変わります。
System.out.println( new Object().hashCode() );
System.out.println( new Object().hashCode() );
System.out.println( new Object().hashCode() );
// 24105143
// 32481053
// 12014584
// 多くのクラスはhashCode()メソッドをオーバーライドしているため、
// ほとんどのクラスのインスタンスは取得できません。
String string = "A";
hashCode = string.hashCode();
System.out.println( hashCode );
// 65
// 「65」は、'A'の文字コード(10進数形式)です。
}
}
public class Sample
{
public static void main( String[] args )
{
// ObjectクラスのhashCode()メソッドで、アドレスもどきを取得します。
Object object = new Object();
int hashCode = object.hashCode();
System.out.println( hashCode );
// 24529889
// この値が、「new Object()」によって作られたインスタンスが
// 置かれているメモリ上の「アドレス」です。
// この値はインスタンスごとに異なるため、呼ぶ度に値が変わります。
System.out.println( new Object().hashCode() );
System.out.println( new Object().hashCode() );
System.out.println( new Object().hashCode() );
// 24105143
// 32481053
// 12014584
// 多くのクラスはhashCode()メソッドをオーバーライドしているため、
// ほとんどのクラスのインスタンスは取得できません。
String string = "A";
hashCode = string.hashCode();
System.out.println( hashCode );
// 65
// 「65」は、'A'の文字コード(10進数形式)です。
}
}
// Sample.java public class Sample { public static void main( String[] args ) { // ObjectクラスのhashCode()メソッドで、アドレスもどきを取得します。 Object object = new Object(); int hashCode = object.hashCode(); System.out.println( hashCode ); // 24529889 // この値が、「new Object()」によって作られたインスタンスが // 置かれているメモリ上の「アドレス」です。 // この値はインスタンスごとに異なるため、呼ぶ度に値が変わります。 System.out.println( new Object().hashCode() ); System.out.println( new Object().hashCode() ); System.out.println( new Object().hashCode() ); // 24105143 // 32481053 // 12014584 // 多くのクラスはhashCode()メソッドをオーバーライドしているため、 // ほとんどのクラスのインスタンスは取得できません。 String string = "A"; hashCode = string.hashCode(); System.out.println( hashCode ); // 65 // 「65」は、'A'の文字コード(10進数形式)です。 } }