[core.java]Java学習(Chapter 3)
19262 ワード
Chapter 3. 基本プログラミング構造in java
: int(byte, int, short, long), float(float, double), char, boolean
F接頭辞を含まない浮動小数点数は常に2種類である.(3.14 == 3.14D)
positive number/0 == positive infinity
0/0 == NaN(not a number)
note
浮動小数点数は切り込み誤差を生じ、財務計算には適していない. BigDecimalを使用すると、浮動小数点の丸め誤差の問題を解決できます.
BigDecimalとは?
:BigDecimalは数字を正確に表現する方法です.(BigIntegerもあります.)
Javaでお金や小数点を扱う場合、BigDecimalは選択ではなく必須です.
Promotion自動変換(Promotion)
:自動変換は、メモリサイズの小さいデータ型をメモリサイズの大きいデータ型に変換する動作です. 強制変換 [注意]ex)整数値を文字値に変換->自動変換不可
ex)
:javaでは、equals()メソッドと==演算子で値を比較できます.
equals()メソッドと==演算子を理解する前に,CBVとCBRを理解した.
CBV(Call By Value):デフォルトでは、ターゲットはアドレス値を持たず、指定値として使用されます.例えばint,float,charの8種類の基本タイプである.
CBR(Call By Reference):ターゲットを宣言すると、参照タイプ(Array、enum、class、interface、Objectなど)などのアドレス値が与えられます.
//基本タイプ以外のすべてのタイプを参照タイプと呼びます.
equals()メソッドと==演算子の違いを見てみましょう.
equals()メソッドによりオブジェクト間でコンテンツを比較します.
==は、ターゲットアドレスを比較するための比較演算子です.
ex)
String変数が空かどうかを決定する方法 整理のUrlアドレス
: https://velog.io/@dhlee/JAVA-String-StringBuffer-StringBuilder-%EC%B0%A8%EC%9D%B4
printf String format スキャナ->ファイルが存在しない場合は例外
PrintWriter->ファイル名が作成できない場合、例外 が発生します.
ループで制御をスキップすると、コードが理解しにくくなり、エラーが発生する可能性があります.ここでcontinue()はif()によって解決できる.
continueとbreakの存在は上記の問題を引き起こす可能性がありますが、削除したい場合は、コードを変更するとコードの複雑さが増す可能性があります.これらは両面的な構文であるため、コードの複雑さを理解し、使用することが望ましい.
戻り文ではリソースの漏洩などが発生する可能性があるため、関数の実装中に一度だけ使用することを推奨します.ただし、この場合がない場合は、複数のreturn文を使用できます.
ベスト3Java終了時のインフラストラクチャ
ありがとうございます.
3.3 Data Types
: int(byte, int, short, long), float(float, double), char, boolean
float & Bigdecimal
F接頭辞を含まない浮動小数点数は常に2種類である.(3.14 == 3.14D)
positive number/0 == positive infinity
0/0 == NaN(not a number)
note
if (x == Double.NaN) // is never true
// == 는 객체 레퍼런스 주소 값 비교이기 때문에 항상 false 출력
if (Double.isNaN(x)) // check whether x is "not a number"
// .equals(x) 비교 방식과 동일하게 값을 비교한다.
System.out.println(2.0 - 1.1);
// -> 0.899999~
// 예상했던 0.9가 출력되지 않는다.
BigDecimalとは?
:BigDecimalは数字を正確に表現する方法です.(BigIntegerもあります.)
Javaでお金や小数点を扱う場合、BigDecimalは選択ではなく必須です.
import java.math.BigDecimal;
public class Main {
public static void main(String args[]) {
double a = 5.001;
double b = 3.000;
System.out.println(a+b);
// 기댓값 : 8.001
// 실제값 : 8.001000000000001
BigDecimal c = new BigDecimal("5.001");
BigDecimal d = new BigDecimal("3.000");
System.out.println(c.add(d)); // 8.001
System.out.println(c.subtract(d));
System.out.println(c.multiply(d));
System.out.println(c.divide(d));
}
}
Promotion & Casting
Promotion
:自動変換は、メモリサイズの小さいデータ型をメモリサイズの大きいデータ型に変換する動作です.
byte a = 10;
int b = a;
// byte(1) < int(4) 이므로 자동 형변환 가능
double x = 9.997;
int nx = (int) x; // x -> double
// nx == 9
byte byteValue = 65;
char charValue = byteValue; // -> 컴파일 에러 발생
// byte(1) < char(2) 이므로 char 메모리 크기가 더 크긴 하지만 char의 범위는 0~65535로 음수가 저장될 수 없기에 예제처럼 자동 형변환이 일어날 수 없다.
char charValue2 = (char) byteValue;
// 강제 형변환 실행시 'A' 라는 결과값이 출력된다.
3.6 Strings
Concatenation
ex)
int age = 13;
String rating = "pc"+age;
// rating == "pc13"
Equality Test
:javaでは、equals()メソッドと==演算子で値を比較できます.
equals()メソッドと==演算子を理解する前に,CBVとCBRを理解した.
CBV(Call By Value):デフォルトでは、ターゲットはアドレス値を持たず、指定値として使用されます.例えばint,float,charの8種類の基本タイプである.
CBR(Call By Reference):ターゲットを宣言すると、参照タイプ(Array、enum、class、interface、Objectなど)などのアドレス値が与えられます.
//基本タイプ以外のすべてのタイプを参照タイプと呼びます.
equals()メソッドと==演算子の違いを見てみましょう.
equals()メソッドによりオブジェクト間でコンテンツを比較します.
==は、ターゲットアドレスを比較するための比較演算子です.
ex)
public class Main {
public static void main(String args[]) {
int a = 1;
System.out.println(a==1); // true
String b = "hello"; // heap 영역의 공통된 객체를 공유하게 된다.
System.out.println(b=="hello"); // 같은 heap 영역을 공유하므로 -> true
System.out.println(b.equals("hello")); // true
String c = new String("hello");
// 새로운 heap 영역을 가지는 String 객체 생성
// -> 즉 b와 c 가 가지는 heap 영역은 다르다.
System.out.println(b==c); // false
}
}
// static, stack, heap 으로 이해하는 것이 더 쉽다.
// url :https://m.blog.naver.com/heartflow89/220954420688
Empty and Null Strings
if (str.length() == 0)
// or
if (str.equals(""))
String, StringBuffer, StringBuilder
: https://velog.io/@dhlee/JAVA-String-StringBuffer-StringBuilder-%EC%B0%A8%EC%9D%B4
3.7 Input and Output
Formatting Output
System.out.printf("%.2f", 10000.0 / 3.0);
// 3333.33
System.out.printf(%,.2f", 10000.0 / 3.0);
// 3,333.33
String name = "Lee Dohun";
int age = 28;
String message = String.format("Hello, %s. Next year, you'll be %d", name, age);
// Hello, Lee Dohun. Next year, you'll be 28
File Input and Output
PrintWriter->ファイル名が作成できない場合、例外
public static void main(String[] args) throws IOException
{
Scanner sc = new Scanner(Paths.get("file.txt", "UTF-8");
}
3.8 Control Flow
continue,break,return書いてもいいですか?
if () {
continue;
}
method();
=>
if !() {
method();
}
continueとbreakの存在は上記の問題を引き起こす可能性がありますが、削除したい場合は、コードを変更するとコードの複雑さが増す可能性があります.これらは両面的な構文であるため、コードの複雑さを理解し、使用することが望ましい.
戻り文ではリソースの漏洩などが発生する可能性があるため、関数の実装中に一度だけ使用することを推奨します.ただし、この場合がない場合は、複数のreturn文を使用できます.
ありがとうございます.
Reference
この問題について([core.java]Java学習(Chapter 3)), 我々は、より多くの情報をここで見つけました https://velog.io/@dhlee/core.java-자바학습Chapter-3テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol