目录
一、数据类型:
1、基本数据类型:
四类:整型 浮点型 字符型 布尔型 八种: * 整型 byte(1) short(2) int(4) long(8) * 浮点型 float(4) double(8) * 字符型 char(2) * 布尔型 boolean(没有明确的大小) 无论32或64位机器,int就是4字节,long就是8字节。所以java的可移植性很高,跨平台便捷。 在java中数值都是有符号的,都有正负,最高位为符号位,剩下都为数值位。(区别与C语言的signed和unsigned)
2、引用数据类型: string 数组 类 接口
public static void main8(String[] args) {
String str = "hello";
System.out.println(str);
System.out.println(str.length());//字符串长度5
/**
* String 是引用数据类型
* 与C语言不同,该字符串“Hello",没有以\0为结尾标志
* 它的字符串长度就是 5,不是6
*/
String str2 = "345";
int val = Integer.valueOf(str2);//将字符串转化为整型数值
System.out.println(val+1);//将该数值+1得到 346
int p = 100;
String str3 = String.valueOf(p);//将整型数值转化为字符串
System.out.println(str3);//打印该字符串 100
int a = 10;
int b = 20;
System.out.println("a = "+a +" b = "+b);//a = 10 b = 20
//字符串+其他类型,此时的+是起一个拼接的作用,变成一个整体的字符串
System.out.println("a + b = "+a+b);//a + b = 1020
//字符串+其他+其他,两个整型不会相加,同样也只是拼接
System.out.println(a+b + "a + b");//30a + b
//其他+其他+字符串,其他类型先运算,之后再拼接字符串
}
二、变量
1、整型变量
public static void main2(String[] args) {
//二、变量
//1、整型变量
int a = 10;
System.out.println(a);
int b;
b = 100;
System.out.println(b);
// int c;
// System.out.println(c);//报错
//原因:java里为了体现其安全性,局部变量在使用前必须初始化。否则报错。
System.out.println(Integer.MAX_VALUE);//int能储存的最大值 2147483647 (2^7-1)
System.out.println(Integer.MIN_VALUE);//int能储存的最小值 -2147483648 (-2^7)
/*Integer是一种包装类型,记下来。暂且认为是int的plus版。
*/
/**
* int d = 2147483648;//java当中,赋值的“字面值常量”一旦超过了变量能储存的最大值,会自动编译报错!
* int d = 2147483647 + 1;//这样是没问题的,不会报错,但是会溢出。
* int d = 2147483647 + a;//这样是没问题的,不会报错,但是会溢出。
*/
}
2.短整型
public static void main4(String[] args) {
/**
* short 短整型 2字节
* 16比特位,其中15个数值位
*/
short a = 10;
System.out.println(a);
System.out.println(Short.MAX_VALUE);//32767(2^15-1)
System.out.println(Short.MIN_VALUE);//-32768(-2^15)
3、长整型
public static void main3(String[] args) {
/**
* 2、长整型 8个字节
* 64比特位,其中63个比特位
*/
long a = 10L;//建议大写L,可以写成10l(可以小写,但是这样不易看清是数字101还是10)
System.out.println(a);
System.out.println(Long.MAX_VALUE);//9223372036854775807(2^63-1)
System.out.println(Long.MIN_VALUE);//-9223372036854775808(-2^63)
}
4、浮点型
public static void main5(String[] args) {
double d = 12.5;
System.out.println(d);
double a = 1.0;
double b = 2.0;
System.out.println(a/b);//0.5
int c = 1;
int e = 2;
System.out.println(c/e);//0
System.out.println(c*1.0/e);//0.5
double num = 1.1;
System.out.println(c*1.0/e);//0.5
System.out.println(num*num);//理论上是1.21,但是由于计算机对浮点数的储存标准,实际上是 1.2100000000000002
/**
* 小数并没有一个非常精确的数字,一般会精确到小数点的后几位
* 参考之前C语言学到的浮点数的存储
* 以float为例
* S - 符号位,E - 指数位, M - 小数位
* 1个符号位,8个指数位,23个小数位
*/
// float f = 12.5;//这样写会报错,因为浮点数默认为double型。而double型存到float型里,会损失精度
float f = 12.5f;//在后面加上f/F就好了
}
4、字符型
public static void main6(String[] args) {
/**
* 与C语言不同,java使用Unicode编码方式
* char 字符型 占 2 个字节
* 也就是说可以表示的字符种类更多,包括中文
*/
char a = 'A';
char b = '张';
System.out.println(a);
System.out.println(b);
System.out.println((int)(Character.MAX_VALUE));//单独打印Character.MAX_VALUE是字符,所以强制类型转换看一下最大值
System.out.println((int)(Character.MIN_VALUE));
}
5、 字节型变量
/**
* byte 字节型 1字节
* 8个比特位,其中7个是数值位
*/
byte b = 127;
System.out.println(b);
System.out.println(Byte.MAX_VALUE);
System.out.println(Byte.MIN_VALUE);
}
6、布尔型变量
/**
* 布尔型 boolean (未明确说明字节大小)
*/
boolean flg = true;//boolean类型只能赋值true或者false
System.out.println(flg);
//System.out.println(true+1);//err
boolean b = true ;System . out . println ( b );b = false ;System . out . println ( b );
三、强制类型转换和整型提升
在 Java 中,当参与运算数据类型不一致时,就会进行类型转换。 Java 中类型转换主要分为两类:自动类型转换 ( 隐 式) 和 强制类型转换 ( 显式 ) 。
public static void main7(String[] args) {
int a = 100;
long b = 10L;
b = a;//数据范围int-》long ,由小变大,隐式转换
//a = b;//err数据范围由大变小,需要强制类型转换,否则编译错误
a = (int)b;//强制类型转换会损失精度,同时只有相关类型才能强制转换,例如boolean和int就能不强制类型转换
int x = 10;
long y = 20;
//int z = x + y;//err
long z = x + y;//方法1(推荐):将z变量定义为大范围数据类型
// int z = (int)(x + y);//方法2:将(x+y)强制类型转换为小范围数据类型,此时可能会导致精度丢失
byte f1 = 10;
byte f2 = 20;
// byte f = f1 + f2;
// err,虽然f1f2都是byte类型,但是计算时,会提升为int再计算,得到的结果也是int,此时赋值给byte型的f,会报错
int f = f1 + f2;//方法1(推荐):将要赋值的f定义为大范围数据类型int
//byte f = (byte)(f1 + f2);//方法二:强制类型转换
/**
* 计算机的cpu通常是按照4个字节从内存中读取数据。所以为了硬件实现方便,例如byte和short这种
* 低于4个字节的数据类型,会先提升成int,再进行计算
*/
}