0827 | 자바의 정석 기초편 :: ch2-10

몸살이 나서 지금 제정신이 아닌거같지만... 오늘 할 일은 해야 하니까 😑 기본형과 참조형 ✔ 값의 타입 8개 = 기본형 - 문자 (가나다, abc) - char - 숫자 ( 정수 - byte, short, int, long / 실수 - float, doubl

ala-nueva.tistory.com

▲ 값변수와 참조변수 정리
 
 
 
[1] 기본형과 래퍼클래스

  • int n = 3; //n은 변수를 담는 그릇.  자바 기본형 = 값변수
  • String s = n; // s는 그릇이 아니다. 이름의 역할 = 참조변수
  • 기본형에 박스를 씌운 (객체화) 래퍼클래스, Integer, Double (대문자로 시작)

 
🟩 문제점
1. String s 그릇(객체) 안에 그릇(객체)이 들어가는 형태가 되어서 불가. 대입연산자를 기준으로 (공간) = (값) 의 구조가 되어야 한다. ▶ 따라서 실제로는 n에 있는 3을 꺼내서 대입을 시도한다.
2. String에 int 값을 연결시키므로 형식이 안맞아서 불가.
 
✅ 변수는 값을 다루는 값 변수와 참조만 하는 참조변수로 나눠진다
✅ 객체는 공간에 담는게 아니라 식별하는 것
 
* 문자열 String은 하나의 도구.
"문자열".메소드() 로 기능을 붙여쓸 수 있는게 그 증거!!!

"스트링"은 그 자체가 객체로, String 메서드를 추가사용할 수 있다
public static void main(String[] args) {
    int x = 3;
    Integer x1 = Integer.valueOf(x); // new Integer(x); boxing. 래퍼클래스를 만드는 새로운 방법
    int x2 = x1.intValue(); // unboxing

    double z = 4.3;
    Double z1 = Double.valueOf(z);
    double z2 = z1.doubleValue(); // unboxing

    String y = "hello"; // string은 이미 박싱이 되어있다고 보면 됨.
}

 
 
[2] String 객체 이해하기
""문자를 표기하는 표기법. 독단적으로 사용되면 런타임이 객체화해준다.
👉 즉,  "큰따옴표"가 있다고 해서 무조건 객체는 아니다.
 
2-1) String과 기본형간 변경하기 - valueOf()

// string <-> 기본형간 변경
int n1 = 10;
String s1 = Integer.toString(n1); // int로 명시된 값을 toString
String s3 = String.valueOf(n1); // 어떤 값이든 string으로 변경

String s2 = "30.2";
double n2 = Double.valueOf(s2);

 
 
 
2-2) String 객체간 비교하기

// String 객체간 비교
String name1 = "아이유";
String name2 = "아이유"; // 자바 실행환경이 박스를 입힘
String name3 = new String("아이유"); // 내가 의도적으로 입힘

System.out.println(name1 == name2); // 같은 박스(객체)를 참조하는지 비교해서 true
System.out.println(name1 == name3); // new로 새 박스를 만들었으므로 서로 다른 박스를 참조해서 false

System.out.println(name1.equals(name2)); // 박스 안의 값 비교 true
System.out.println(name1.equals(name3)); // 기존 박스와 새 박스 안의 값도 동일해서 true
System.out.println(name1 =="아이유"); // true. 중복박스를 만들지않는다.

 
 
 
2-3) String에 내장된 기능으로 문자열 출력하기
 
✔ 스트링이 가진 내장메서드 활용하기
String.length() // 문자열 길이 반환
String.indexOf() // 지정한 매개변수의 인덱스 반환 
String.substring(start index,end index) // 인덱스로 추려낸 문자나 문자열 반환 (end index-1 까지 출력)

// 확장자를 제외한 파일명 출력
String fileName = "photo.jpg";
System.out.println("길이: " + fileName.length()); // 전체 길이 9반환

int index = fileName.indexOf("."); // 점이 있는 위치 찾기
System.out.printf("index:%d%n ", index);

String result1 = fileName.substring(0, 3);// 파일명에서 3번쨰 문자까지 출력
System.out.println(result1); // 인덱스 0,1,2 문자만 출력되어 pho

String name = fileName.substring(0, index);// 파일명만 출력하기
System.out.println(name);

String name1 = fileName.substring(0, fileName.indexOf(".")); // 변수명이 아닌, 메서드 그대로 넣기
System.out.println(name1);

 
 
✔ 그 외 String 메소드 실험

int last = myname.lastIndexOf("u"); // 해당되는 문자열을 찾아 인덱스 반환. 없으면 -1
char word = myname.charAt(0); //0번째 문자 반환
boolean t  = myname.contains("a-ki"); // 문자열이 포함되어있는지 참거짓 반환
String added = myname.concat("'s english name is lia"); // 기존 문자열에 원하는 문자열 더해서 반환
String change = myname.replace(word, 't'); // 지정한 문자를 원하는 문자로 교체
String change1 = myname.replace("y","myuna" ); //지정한 문자열을 원하는 문자열로 교체. 문자-문자열 로 대입은 가능한데 똑같이 String으로 적혀있어야 한다 ("y" -,"myuna")는 되는데 ('y'-"myuna")는 안됨
String upper = myname.toUpperCase();
String[] arr = myname.split("-"); // 지정문자열로 잘린 문자열이 배열로 반환

System.out.println("last: " + last);
System.out.println("word :" + word);
System.out.println("t:" +t);
System.out.println("added:" + added);
System.out.println("change:" + change);
System.out.println("change1:" + change1);
System.out.println("upper: " + upper);

System.out.println("split 결과는 아래에!");
for(String s : arr)
System.out.print(s);

+ Recent posts