标签:lin exti img for 原始数据类型 基础知识 inf nts ann
首先要提一句的是,在JAVA语言中,当我们要声明一个长整型或者单精度的数值类型的变量的时候,经常会见到在一个数字后面出现F/f
,L/l
。那么为什么要加入这些标识呢?
这是因为:在Java中,当开发者输入了数字,如:25
,这个数字默认的类型为int
型,其支持的数据范围如下,当我们的数字大小超过了int
型支持的大小之后,int类型所支持的内存大小就无法满足了,所以编译器会报编译错误。为了声明长整型的数字,就需要在尾部加上L/l
,以高速编译器,这是一个长整型的数字。、
这个就和python中
0b
标识二进制数据,0o
标识八进制,0x
标识十六进制
同理,在java编译器中,小数数值默认为double
双精度类型,当我们为了节省内存选用单精度时,就需要使用F/f
进行标识。
public class Main {
public static void main(String[] args) {
long testLong = 2_234_123_123L;
float testFloat = 2.34F;
}
}
import java.util.Date;
public class Main {
public static void main(String[] args) {
byte age = 30;
Date now = new Date();
System.out.println(now);
}
}
原始类型的赋值会分配新的内存,所以将指向不同的地址。
引用类型的赋值只是将地址赋给了另一个变量,其指向的内存是同一个,所以一个变则都变。
import java.awt.*;
public class Main {
public static void main(String[] args) {
Point point1 = new Point(1, 1);
Point point2 = point1; //java.awt.Point[x=1,y=1]
point1.x = 2;
System.out.println(point2); //java.awt.Point[x=2,y=1]
}
}
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] numbers = new int[3];
numbers[0] = 1;
numbers[2] = 2;
int[] numbers2 = {1, 2, 3, 4, 5};
System.out.println(Arrays.toString(numbers));
System.out.println(numbers2.length);
}
}
注意,对于数组的输入,这里需要引入Arrays包,调用其中的toString方法,对于高维数组,需要使用deepToString
import java.text.NumberFormat;
public class Main {
public static void main(String[] args) {
NumberFormat percent = NumberFormat.getPercentInstance();
String res = percent.format(0.456);
System.out.println(res);
}
}
默认有针对百分数和货币的转换。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("姓名:");
String res = scanner.nextLine().trim();
System.out.println("你是:" + res);
;
}
}
import java.text.NumberFormat;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//计算贷款
Scanner scanner = new Scanner(System.in);
System.out.print("请输入本金: ");
float PrincipalAmount = scanner.nextFloat();
System.out.print("请输入年利率: ");
float interestRateOfYear = scanner.nextFloat();
System.out.print("请输入贷款年份: ");
int numberOfPaymentsByYear = scanner.nextInt();
float P = PrincipalAmount;
float i = interestRateOfYear / 12 / 100;
int n = numberOfPaymentsByYear * 12;
double M = P * i * Math.pow(1 + i, n) / (Math.pow(1 + i, n) - 1);
System.out.println("您每月需还贷: " + NumberFormat.getCurrencyInstance().format(M));
}
}
运行起来没错,但是嗯~ o( ̄▽ ̄)o,太稚嫩了,看看大佬的写法
import java.text.NumberFormat;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//计算贷款
final byte MONTHS_IN_YEAR = 12;
final byte PERCENT = 100;
Scanner scanner = new Scanner(System.in);
System.out.print("请输入本金: ");
float principal = scanner.nextFloat();
System.out.print("请输入年利率: ");
float interestRateOfYear = scanner.nextFloat();
System.out.print("请输入贷款年份: ");
byte numberOfPaymentsByYear = scanner.nextByte();
float monthlyInterest = interestRateOfYear / MONTHS_IN_YEAR / PERCENT;
int numberOfPayments = numberOfPaymentsByYear * MONTHS_IN_YEAR;
double mortgage = principal
* monthlyInterest * Math.pow(1 + monthlyInterest, numberOfPayments)
/ (Math.pow(1 + monthlyInterest, numberOfPayments) - 1);
System.out.println("您每月需还贷: " + NumberFormat.getCurrencyInstance().format(mortgage));
}
}
大佬考虑到了
魔法数字
的影响,所以用常量声明了。
[JAVA] 1. Java中的基础知识之数据类型 [Java中的默认类型]
标签:lin exti img for 原始数据类型 基础知识 inf nts ann
原文地址:https://www.cnblogs.com/modai/p/12655036.html