强类型语言
要求变量的使用要严格符合规定,所有的变量都必须被定义后才能使用
java数据类型分为两大类
基本类型
引用类型
基本类型:
数值类型
整数类型 int 、short(-32768-32767)、long(如long num = 30L )、byte(-128-127)
浮点型 float(占4个字节,定义时要在数字后加F,如50.1F)、double(占8个字节,如3.141592653589)
字符类型 char(占2个字节,“A”)
布尔类型 boolean
引用类型:类、接口、数组
数据类型扩展:
在java代码中:二进制(0b开头) 十进制 八进制(0开头) 十六进制(0x开头)
int i = 10; 输出10
int i1 = 0b00101 输出5
int i2 = 010; 八进制 输出8
int i3 = 0x10; 十六进制 输出16
二进制转十进制:1101.01 1x2^3+1x2^2+0x2^1+1x2^1+0x2^-1+1x2^-2 = 13.25
八进制转十进制:246 2x8^2+4x8^1+6x8^0 = 166
十六进制有十六个数码:0 1 2 3 4 5 6 7 8 9 A B C D E F
十六进制转十进制:3D4 3x16^2+13x16^1+4x16^0 = 980
浮点数拓展
示例1:
float f = 0.1f //f =0.1
double d = 1.0/10 //d= 0.1
System.out.println(f==d); //输出false
示例2:
float d1 = 234234243425243234f
double d2 = d1+1
System.out.println(f==d); //输出true
//float 浮点数有限的,离散的 舍入误差 大约 接近但不等于
所以最好完全避免使用浮点数来进行比较,特别是银行业务,用BigDecimal
字符串拓展
char c1 = ‘a‘;
char c2 = ‘中‘;
System.out.println(c1); //a
System.out.println((int)c1); //97
System.out.println(c2); //中
System.out.println((int)c2); //20013
所有的字符本质还是数字,编码Unicode 表:(97 = a 65 = A) 占2字节
String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1==s2); //false
String s3 = "hello";
String s4 = "hello";
System.out.println(s3==s4); //true
System.out.println(s1.equals(s2)) //true
"=="如果比较的是基本类型,则比较的是值是否相等;如果是引用对象,则比较得是在内存空间中的存储位置是否一致。
equals方法继承于Object类,如果没有重写equals方法,则==与equals等同。
String类中重写了equals方法,"equals"常用来比较对象的值是否相等
由低到高
byte, short ,char-> int ->long ->float->double
int i = 128;
byte b = (byte)i; //内存溢出
double d = i;
System.out.println(i); //128
System.out.println(b); //-128
System.out.println(d); //128.0
强制转换 (类型)变量名 由高到低
自动转换 由低到高
注意:
不能对布尔值转换
不能把对象类型转换为不相干的类型
把高容量转换为低容量时,强制转换
转换的时候可能存在内存溢出,或精度问题
System.out.println((int)23.7); //23
System.out.println((int)-45.89f); //-45
原文:https://www.cnblogs.com/lrc778/p/14806940.html