Jam's story

참조변수 본문

자바

참조변수

애플쩀 2021. 12. 31. 21:55

기본타입엔느 정수타입(byte,int,short,int ,long)이 있고 실수타입에는 (float ,double)이 있고 논리타입에는 boolean이 있다. 

참조타입에는 배열타입 열거타입 클래스 인터페이스가 있다 .

 

기본타입은 값을 직접 저장하지만, 참조타입은 번지(주소)를 값으로 갖는다.
string name="애플"; 이라고 해도 , 애플을 저장하는것이 아닌  주소값을 저장한다. 

 

변수는 스택영역에 생성되고 객체는 힙 영역에 생성된다. 
힙영역에 객체와 배열이 생성된다 
자바에셔는 배열을 객체로 취급한다 

 

스택영역에는 주소값을 저장 

참조변수의 ==, != 연산

A와 B는 같은객체 (객체1)을 가르키고 있고, C혼자 다르다 

A==B  -> true

A ==C -->false 이다. 

참조변수는 null로 초기화가 가능하다 이는 가르키는 객체가 없다는 뜻이다. 

그래서 null로 초기화된 변수에 값을 저장하려고 하면 nullPointerException오류가 발생한다., 

 

== 연산자는  객체의 번지가 같은지를 확인한다. 

String name="apple";

String name2="apple";

name 과 name2는 동일한 문자열 리터럴로 String 객체를 생성했기 때문에, name==name2의 결과는 true

 

but, new String을 이용하였을때는 새로운 객체가 생성되기 때문에 == 연산자 비교시 false가 나온다 

String name3=new String("apple");

 

 

package smhrd;

import java.io.IOException;
import java.util.Scanner;

public class Exam {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub}
		
	String name1="apple";
	String name2="apple";
	if(name1==name2) {
		System.out.println("참조가 같다.");
	}else {
		System.out.println("참조가 다르다 ");
	}
	
	if(name1.equals(name2)) {
		System.out.println("문자열이 같다.");
	}
	
	String name3=new String("apple");
	String name4=new String("apple");
	if(name3==name4) {
		System.out.println("참조가 같다.");
	}else {
		System.out.println("참조가 다르다 ");
	}
	
	if(name3.equals(name4)) {
		System.out.println("문자열이 같다.");
	}
		
}}

 

 

Stirng객체에 null을 넣는다면? -> JVM은 참조되지 않은 객체를 쓰레기로 취급하고 메모리에서 삭제한다. 

 

 

'자바' 카테고리의 다른 글

향상된 for문  (0) 2022.01.02
다차원배열  (0) 2022.01.01
배열  (0) 2022.01.01
continue 문  (0) 2021.12.31
for의 바깥쪽 반복문 종료  (0) 2021.12.31
Comments