初识java
1、基本数据类型
(1)整型变量
定义方法:int 变量名 =初始值;
所占字节:4
(2)长整型变量
定义方法:long 变量名 =初始值;
所占字节:4
```java
在这long num =10L;
System.out.println(Long.MAX_VALUE);//最大值9223372036854775807
System.out.println(Long.MIN_VALUE);//最小值-9223372036854775808;
综合:long定义长整形,数字后常用L或l,占8个字节,所占位数为64,数取值范围为“-2^63~(2^63-1)里插入代码片
``
(3)长整型变量
double num = 1.1;
System.out.println(num*num);//运行结果1.2100000000000002(java中的double虽然是八个字节但是浮点数的内存布局和整数差别很大,不能单纯的用2^n的形式表示数据范围,是用有限的内存空间表示可能无限的小数,势必会存在一定的精度误差)
所以当用double类型进行小数运算时 精度会出现不准,使用BigDecimal替代`
//精度不准
System.out.println(1.1*1.1);
//使用此类表示小数
BigDecimal b1 = BigDecimal.valueOf(1.1);
BigDecimal b2 = BigDecimal.valueOf(1.1);
System.out.println(b1.multiply(b2));
(4)单精度浮点型变量
float num = 2.0f;
System.out.println(num);
(5)字符类型变量
char ch ='呵';
System.out.println(ch)char;//一个汉字占一个字节
(6)字节类型变量
byte value = 0;
System.out.println(value);//字节类型表示的也是整数,只占一个字节,表示的范围(-128~+127)
(7)短整型类型变量
byte value = 0;
System.out.println(value);//字节类型表示的也是整数,只占一个字节,表示的范围(-128~+127)
(8)布尔类型变量
boolean value = true;
System.out.println(value +1);java: 二元运算符 '+' 的操作数类型错误
// 第一个类型: boolean
// 第二个类型: int 这几行为错误代码
(9)字符串类型变量
String name = "zhangsan,lisi ";
System.out.println(name);/String(字符串)不是基本类型,而是引用类型
//
String a = "hello";
String b = "java";
String c = a+b;
System.out.println(c);//字符串的+操作表示字符串的拼接
//
String str = "result =";
int a = 100;
int b = 200;
String result = str + a + b;
System.out.println(result);//运行结果result =100200;用字符串和整数进行拼接
#字符串和整数进行拼接
int a =15;
int b =38;
System.out.println("a="+a+",b ="+b);//a=15,b =38
int a =10;
long b =20;
// a=b;/编译不通过,从long转换到int可能会有损失
// b=a;/编译通过
int a =10;
double b =20.0;
// a = b;/编译不通过,从double转换到int可能会有损失
// b = a;编译通过
结论 ;不同数字类型变量之间赋值,表示范围更小的类型能隐式转换成范围较大的类型,反之则不行。
int a =20;
double b =10.5;
a =(int)b;//强制转化,可能导致精度丢失,且互不想干的类型无法强转,例如int和boolern
byte a =10;
byte b =20;
byte c =a+b;
System.out.println(c);//程序报错,不兼容的类型: 从int转换到byte可能会有损失
byte d =(byte)(a+b);
System.out.println(d);//30
结论;
1、byte和byte都是相同类型,但是出现编译报错,原因是虽然a、b都是byte,但是计算a+b会先将a和b都提升为int,再进行计算,这赋给c,就会出现上述错误;
2、由于计算机的CPU通常是按照四个字节为单位从内存中读写数据,为了硬件上实现方便,诸如byte和short这种低于四个字节的类型会先提升为在参与运算。
数据类型的转换
1.大的转小的(需要强制转换),会出现精度丢失问题(溢出问题,不推荐)
2.小的转大的(隐式提升)