
No.2ベストアンサー
- 回答日時:
No1の方がおっしゃる通り、Javaでは全て値渡しです。
オブジェクトは参照データ型といわれる型になります。
参照渡し、と思っているのは【参照を示す場所を値渡ししている】になります。
わかりやすく説明されているサイトをご紹介します。
という前提で疑問に私なりの回答をしてみます。
1.基本型を参照渡しにすることはできないのか?
基本型を参照データ型にラップし、オブジェクトとして扱うことはできます。例をあげるとbooleanではBooleanオブジェクトに該当します。
2.基本型を参照渡しすることができないのはなぜか?
1.のような方法で【Natsu0611さんが思われているような参照渡し】は可能ではないでしょうか。
3.オブジェクトを値渡しすることができないのはなぜか?
おそらくではありますが、メモリ管理の問題ではないでしょうか。
回答が合っているかどうかはちょっと自信は無いですが・・・。
参考URL:http://java.269ch.jp/archives/2005/07/post_6.html
わかりやすく説明されているサイトまで教えて頂きありがとうございます。
早速行ってみるとサンプル付きで説明されていて大変わかりやすかったです。
ですがjavaを学び始めてまだまだ日が浅いせいか
>基本型を参照データ型にラップし、オブジェクトとして扱うことはできます。
の意味が「???」でした;
お忙しいところお手数をかけてしまい申し訳ありませんが
もしよろしければ説明をお願いできないでしょうか?;
No.3
- 回答日時:
>基本型を参照データ型にラップし、オブジェクトとして扱うことはできます。
の意味が「???」でした;
当初の質問からは脱線しますが・・・。
プリミティブ型(intやbooleanなど)は所謂オブジェクトではありません。
そこからどのような問題が発生するかですが、
例えばintの配列を作成したいと思います。
しかし、そのintの配列は何個用意していいかわからず可変に扱いたい。
Javaでは配列のサイズは宣言時(厳密には異なるが)により確定されてしまいますので、可変で扱いたいときはCollectionインターフェース等を使用します。
しかし、Collectionが持つaddやremoveの引数型はObjectです。つまりプリミティブ型は渡すことが出来ません。
-----------------------------------------
int i = 1;
Collection c = new ArrayList();
c.add(i) ← 出来ない
-----------------------------------------
(*J2SE5.0以降はAutoBoxingにより可能。しかし注意が必要。)
これを実現するためにプリミティブ型にはラッパークラスが用意されています。
intならばIntegerクラス、booleanならばBooleanクラス・・・。といったものです。
つまり、プリミティブ型をObjectとして扱う方法を実現するのです。
-----------------------------------------
int i = 1;
Integer iI = new Integer(i); ←intをIntegerクラスにラップ
Collection c = new ArrayList();
c.add(iI) ← 可能
-----------------------------------------
以上がラッパークラスの基本的な役割になります。AutoBoxingに関してはさらに解説が長くなるので割愛させていただきます。改めてご質問ください。
さて、当初の疑問点に関してですが、もう少し突っ込んだところでの解説をしているサイトがありました。ご参考ください。
参考URL:http://itpro.nikkeibp.co.jp/members/NBY/techsqua …
当初の質問と違う内容のものまで詳しく説明して頂きありがとうございます。
まだなんとなく理解という状態なので再度教えて頂いたURLの内容を理解しながら
javaへの理解を深めていきたいと思います。
回答本当にありがとうございました。
No.1
- 回答日時:
Javaに「参照渡し」はありません。
「オブジェクトは参照渡しになり」というのは一見、そのように見えますが、
参照している値を渡しているのにすぎず、これも値渡しです。
例えば、呼び出し先でnewしなおした場合は、結果は反映されません。
変数は、本体(配列の実態など)が 格納されているアドレスを持っているに過ぎず、
引数はそのアドレスのコピーが渡されます。
つまり、 インスタンスのアドレスという値が渡されているため、一見、参照渡し
に思えますが、変数の値(アドレス)を書き換え(newしなす)ても、呼び出し
元には影響しません。
迅速な回答ありがとうございます。
>Javaに「参照渡し」はありません。
の一言にビックリしました!!
ですが、わかりやすい説明を読んで納得できました!
迅速かつわかりやすい丁寧な回答本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 関数ポインタの高速化のメリット 7 2023/05/05 20:15
- その他(プログラミング・Web制作) python質問 1 2023/08/14 11:54
- その他(プログラミング・Web制作) Pythonのオブジェクトの関数について 2 2023/05/11 19:15
- Excel(エクセル) こんにちは。ExcelのVLOOKUP関数のことで教えてください。 2 2022/05/07 11:33
- その他(プログラミング・Web制作) Pythonのデータ型 2 2023/04/26 12:53
- Excel(エクセル) ピボットテーブルの参照式はオートフィル出来ない? 2 2023/03/03 15:57
- Visual Basic(VBA) エクセルのマクロとシートの保護について教えてください。 1 2022/10/18 08:36
- Excel(エクセル) Excel 参照元の値を参照したい 1 2022/08/20 18:58
- ネットワーク しばらくするとネットワークの参照ができなくなる 4 2023/06/17 16:56
- パスポート・ビザ ビザについて質問です。 現在バンクーバーに留学しており、留学期間は来年の8月までです。帰り道に韓国に 1 2022/12/18 17:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Vectorを要素とするVector
-
Listに格納されているオブジェ...
-
自動クリックの処理について
-
Excelで =EMBED("Acrobat Docu...
-
ワードで画像をドロップすると...
-
VBA 過去のファイル内の同じオ...
-
newは明示的にした方が良いのか?
-
StringBuilderのマルチスレッド
-
オブジェクト指向とは何ぞや…
-
JavaのStringは
-
JAVAアソシエイツの問題
-
パワーポイントのVBAでテキスト...
-
オブジェクト指向
-
設定したGDIオブジェクトを必ず...
-
MapViewOfFile() はカウンタを...
-
withを入れ子にして使う方法
-
JSPのout.printについて
-
Hyperlink.Followはブラウザを指定
-
マルチスレッド下でのインスタ...
-
VBA 同じ名前のオブジェクトを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで =EMBED("Acrobat Docu...
-
パワーポイントのVBAでテキスト...
-
EXCEL VBAにて動的にCheckBOXを...
-
VBA 同じ名前のオブジェクトを...
-
C#でフォームのオブジェクト名...
-
VBAのWindowオブジェクトとWork...
-
ビジュアルC++でボタンの有...
-
COMコンポーネントって何?
-
CoCreateInstanceでエラーになる。
-
ワイルドカード<?>と型パラメー...
-
戻り値がクラスオブジェクト
-
error C2712: オブジェクト ア...
-
Vbで通常使用するプリンターを...
-
質問すいません。 javascriptの...
-
Object型からDouble型へのキャスト
-
Accessの連結・非連結オブジェ...
-
オブジェクトレベルとメタレベル
-
C++でのクラスオブジェクトの破棄
-
時間帯判定をする。
-
VBAでvlookup関数から、別シー...
おすすめ情報