📚

プログラミング自主学習 34日目 参照型(NullPointer Exception/String)

2023/06/29に公開

参照型

Javaのデータータイプには基本型(Primitive type)と参照型(reference type)がある。
基本型は以前勉強した、整数型、実数型、論理型がある。
参照型にはインターフェース型、配列型、クラス型がある。

基本型の変数はその値が入っている。
しかし、参照型の変数は値ではなく、オブジェクトのアドレスが入っている。
そのアドレスを参照し、値を代入したり、呼び出すため、参照型と言う。


参照:https://cs.mickeyengel.com/java/java_02_varsAndOutput.php

変数は基本的にスタックに存在し、基本型の場合は値もスタックに保存されているが、
参照型の場合、スタックにメモリアドレスがあり、そのアドレスを参照して、
ヒープにある参照型の値にアクセスする。その値が入っているところがオブジェクトだ。

参照:https://koreanfoodie.me/635

NullPointer Exception

nullはまだヒープメモリのアドレスを持っていないということを意味する値だ。
変数が参照できるオブジェクトのアドレスがないため、値を代入することもできない。

Case1
String hobby = "여행";
hobby = null;
Case2
String hobby = "여행";
hobby = "영화";

このように既存の参照するオブジェクトの住所(null)を失ったり、他のオブジェクト("영화")の住所を入れることで、最初のStringオブジェクト"여행"は参照がなくなった。

これにより、該当オブジェクトは自動的に消滅され、このようなjavaの機能をGarbage Collectorという。

String

String Constant Pool

https://starkying.tistory.com/entry/what-is-java-string-pool

基本的に同じStringリテラルはHeap領域のString constant Poolに生成される。

<同じString pool>
String a = "yes"
String b = "yes"

しかし、new演算子を通してインスタンスを作成する場合、異なるString poolに保存されるため、メモリアドレスも異なるようになり、メモリ効率にはよくない。

METHOD

indexOf(); : 特定な文字列が何番インデックスから始めるかをリータンする。

String str ="Hello world"
int result = str.indexOf("Hello");
System.out.println(result);
0
``
 
```java
String str ="Hello world"
int result = str.indexOf("hello");
System.out.println(result);
-1

indexOfメッソドに指定したメッソドがない場合は、-1をリータンする。

contains(); : 特定な文字列を含めているかどうかをチェックし、trueかfalseにreturnする。

String str ="Hello world"
boolean result = str.contains("hello");
System.out.println(result);
false

split(); delimeterがあるところを分離する。主に配列を使用する。

String str="I.LOVE.YOU"
String[] arr=str.split(".");

arr[0] arr[1] arr[2]

I LOVE YOU

Discussion