最近変数とオブジェクトの差がよく分からなくなってしまいます。String a = "Java" のaはオブジェクトだと思います。次の動画で学びました。基本データ型(intなど)int a =0; aは変数なのかなと思います。オブジェクト指向の設計図でString a; とだけ記述している場合はaはオブジェクトですか?それとも変数ですか?インスタンス化していないので、どっちなんだろうと気になってしまいました。
コジロウのごぼうさん、コメントありがとうございました。 「String a;」の a は変数ですね。 例えば「String a = "Java";」に対して、クラスとオブジェクトを区別する意味合いで「Stringはクラスでaはオブジェクト」ということもあるんですが、正確には "Java" がオブジェクトで、aはオブジェクトの参照値が入っている変数です。 つまり、インスタンス化したとしても a は変数だと思ってください🍀
現在SE11シルバーの黒本を勉強しています。 Sample a = new Sample(10,”a”) Sample b = new Sample(10,”b”) System.out.println(a.equals(b)); の答えはtrueでした。 動画の内容と違うようですがどう違うのでしょうか?
Java開発のAPI活用に関する情報をありがとうございます!
個人的にはEchoAPIというツールを使っています。特にPostmanスクリプトをサポートしている点と、直感的な操作性が魅力的ですよ。
equalsメソッドは参照先の値を比較するものだと思っていましたが、Objectクラスは変数の値(アドレス値)を見る・Stringクラスは参照先の値を見る、というように動きが違うんですね!!思わず2度見しました😅
ずっとStringでの文字列の値の比較にしか使わないのかな~と思っていましたが、このように使ったりするのですね~😮
クラスによって挙動が違うのは面白いですね!
Yukioさん、コメントありがとうございました!
ObjectクラスとStringクラスではequalsメソッドの動きが違うのは面白いですよね。
この2つのクラスは、APIリファレンスを見てみるのもオススメです👍
Javaのすべてのクラスが持つメソッドにはどんなものがあるのかが分かったり、Stringクラスには他にも便利なメソッドがたくさんあるので見ていて楽しいですよ。
さらっと出てきたけど ToString() メソッドがなんだかすごく便利そう。
やなぎさん、コメントありがとうございました!
たしかに、toString()メソッドは大切なメソッドですね。
Javaのすべてのクラスが持ってるメソッドってだけですごいなと思います😄
javasilverを勉強している者です。とても勉強になり拝見させていただいています。
1点質問したいのですが「System.out.println(obj)したときは自動的にtoStringメソッドが呼び出される」と板書されていますがこれはprintlnメソッドにてString.valueOfメソッドが呼び出され、nullの場合はnullという文字列で出力するという解釈で良いでしょうか?
宜しくお願い致します。
toru kさん、コメントありがとうございました!
そうですね。質問文からAPIリファレンスをよく読み取れている様子が伝わってきます😄
String.valueOfメソッドでも、
> 引数がnullの場合は"null"に等しい文字列が返される
という記述を確認できますね。
最近変数とオブジェクトの差がよく分からなくなってしまいます。String a = "Java" のaはオブジェクトだと思います。次の動画で学びました。基本データ型(intなど)int a =0; aは変数なのかなと思います。オブジェクト指向の設計図でString a; とだけ記述している場合はaはオブジェクトですか?それとも変数ですか?インスタンス化していないので、どっちなんだろうと気になってしまいました。
コジロウのごぼうさん、コメントありがとうございました。
「String a;」の a は変数ですね。
例えば「String a = "Java";」に対して、クラスとオブジェクトを区別する意味合いで「Stringはクラスでaはオブジェクト」ということもあるんですが、正確には "Java" がオブジェクトで、aはオブジェクトの参照値が入っている変数です。
つまり、インスタンス化したとしても a は変数だと思ってください🍀
@@SekaChan なるほど、そういうことですか!わかりやすい説明ありがとうございます。
クラスの動画という事で、質問があります。
Carクラスを作成したとして。
Car car1;とした際に
Car型の変数と呼ばれる。
という説明があるのですが、クラスが型と呼ばれているのはなぜか?と頭がハテナになってしまいます。
クラスはクラスなのでは、、?
なぜ、型と呼ばれるのか、それが分かりません。
これまで、Stringなど書いていた場所にクラス名を書くことが増えてきたので、クラス名を記述した際にどうなるのかが全く分かりません。
拙い質問で恐縮ですが、可能な範囲でご教授頂ければ幸いです。
String a = "テスト"
String b = "テスト"
System.out.println(a.equals(b))
上記の場合は、同じ文字列なのでTrueになると思うのですが、
今回の動画だと同じ文字列の"菅原"がfalseになるのはなぜなのでしょうか。
勉強不足で申し訳ないです。。
追記、
あくまでインスタンス化した、参照値をequalsメソッドで比較しているので、falseになっているという考え方でいいのでしょうか。
チョッパーさん、コメントありがとうございました。
> インスタンス化した、参照値をequalsメソッドで比較しているので、falseになっている
↑この考え方は正しいですね👍
書いてくれたプログラムはtrueになるのにこの動画で示したプログラムでfalseになる理由は、【Stringオブジェクトの作り方が違うこと】にあります。
String b ="テスト"; の場合は、aと同じオブジェクトを参照します。よって、aとbの参照値が等しいためtrueになります。
String b = new String("テスト"); の場合は、メモリ上に新しく(new)オブジェクトを作ります。そのため、aとbの参照値は異なりfalseになります。
Sringクラスは少し特殊な動きをするので、こちらの動画も見てもらうと理解が深まると思います!
th-cam.com/video/bF5-vjFCM9A/w-d-xo.html
そういうことですね!
理解出来ました!!
ありがとうございます🙇♂️
javaに関してもそうですが、
Springや、SpringBootも勉強中なので動画出して欲しいです!
質問があります。
toStringメソッドが自動で呼び出されると説明がありましたが、
サンプルプログラムの問題のtoStringは文字列に変更させるだけのtoStringをオーバーライドしてる感じでしょうか?
そうですね。
7:14から説明しているように、サンプルのtoStringメソッドは名前を含んだ文字列を返すようにオーバーライドしています。
@@SekaChan
ありがとうございます!
解決致しました。
確認のような質問をしてしまって申し訳ございません。
といいますか、
"オーバーライド"と仰ってましたね。聴き逃してました…
いつも動画でお世話になっています、equalseメソッドについて質問です。
ーーーーーーーーーーーーーーーーーーーーーーー
public class Sample {
private int num;
private String name;
public Sample(int num, String name) {
this.num = num;
this.name = name;
}
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (obj instanceof Sample) {
Sample s = (Sample) obj;
return s.num == this.num;
}
return false;
}
}
ーーーーーーーーーーーーーーーーーーーーーーーーー
public class Main {
public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ
Sample a = new Sample(10, "a");
Sample b = new Sample(10, "b");
System.out.println(a.equals(b));
}
}
このようなコードの場合Mainクラスでa.equals(b)をしているときに、引数で渡されるbはSample型なのにどうしてSampleクラスのequalsメソッドが実行されるのですかね??Sampleクラスのequalsメソッドは引数がObject型なので呼び出せないと思ったのですが実行できます。
SampleクラスのequalsメソッドはObject型のメソッドのオーバーライドなのはわかりますが、なぜ引数がSample型でSampleクラスのequalsメソッドは受け取る引数がObject型で一致しないのに実行されるのか不思議です
Kazukiさん、コメントありがとうございました。
これはObjectクラスというより、参照型の型変換やポリモフィズム関連の話ですね。
こちらの動画を見てもらうと参考になるかなと思います👍
●4-6参照型の型変換 th-cam.com/video/yyPdrxOQWbs/w-d-xo.html
●4-7抽象クラスとポリモフィズム th-cam.com/video/tfrmaMGJtic/w-d-xo.html
現在SE11シルバーの黒本を勉強しています。
Sample a = new Sample(10,”a”)
Sample b = new Sample(10,”b”)
System.out.println(a.equals(b));
の答えはtrueでした。
動画の内容と違うようですがどう違うのでしょうか?
saeki OSさん、コメントありがとうございました。
書いてくれたプログラムを実行したら false が表示されました。
(Sampleクラスは Sample(int, String){} のコンストラクタのみ実装)
問題内容を見ないと正確なことはいえませんが、おそらくSampleクラス内でequals()メソッドがオーバーライドされているのではないでしょうか。
@@SekaChan さん
返信ありがとうございます!やっぱりちょっと難しいですね💦まだオーバーライドが完璧に理解できてるわけではないのでせかチャンさんの動画で勉強させていただきますのでよろしくお願いします>
覚えること多いけどもう少し