程序中 +号的使用
- 当左右两边都是数值型时,则做加法运算。
- 当左右两边有一方是字符串,则做拼接运算。
System.out.println(100+98); //198
System.out.println("100"+98); //10098
System.out.println("100+98"); //100+98
数据类型
-
Java的整型变量(具体值)默认为int型,声明long型常量后加‘l’或‘L’
-
Java的浮点型变量(具体值)默认为double型,声明float型常量,要在常量后面加‘f’或者‘F’
-
科学计数法形式:5.12e2(5.12*10的2次方)
-
5.18;592.0f;.512(相当于0.512,0可以省略)
-
注意判断是否相等的陷阱:
- 若是直接赋值的两个小数,则可以直接判断是否相等;
- 若是一个要机器计算的小数和一个直接赋值的小数进行判断是否相等就不行了
- (如2.7和8.1/3),因为机器计算当中会有对精度的不确定性,导致算出来的小数是近似值。
-
各个类型的字节数
- byte[1]、short[2]、int[4]、long[8]
- float[4]、double[8]
- char[2]
- boolean[1]
-
char类型运算
int型可以接收一个整数,也可以接收一个字符型的编码值
char类型只能接收编码值,和[0,65535]这之间的整数,比如10、20这样(不能是变量,比如n,m,a)
暂时的解释
一句话总结:字面量(常量)在运算的时候会进行类型转换,运算结束后的赋值阶段会自适应。
变量带有强制的类型定义,在运算过程和赋值过程,都不会自适应。
所谓自适应,我们可以理解成,等号右边有一个常量整数(注意是整数,不能是浮点数),它正在等待将自己赋值给左边的变量
此时,java会先判断这个整数是否在等号左边定义的类型范围内。
注意,这时候并没有默认右边是整型数据(也就是int)
如果在范围内,那么这个整数就会强转为等号左边类型的数据
如果不在范围内(超出范围),那么这个整数就会被默认转成int型数据
而此时,就会出现int型不能直接向char型转换的类型错误
这也就是第一行char a1 = 10
不报错而char a2 = 65536
报错的原因
因为char的范围是[0,65535]
同理,对short、byte也是同样的理解:
所以我们再看之前的错误:
char c3 = m1; //m1是int型,这是已经定义好的,所以不能转换,故错误
char c4 = 'a' + 10; //等号右边属于字面量,在底层是按照整型计算的,计算出来数字为107,在char范围内,所以在赋值的时候,转换成了char型
char c5 = c1 + 10; //这里c1属于变量(复制阶段不能自适应),底层计算出来的结果107,带有类型int,所以赋值的阶段出错
char c6 = 'a' + m1;//同样的道理,m1也是变量,和上面一样的错误类型
- boolean类型
- 只允许取值true和false,不允许使用 0 和非 0 的整数来代替 true 和 false(与C语言不同)。
- 引用数据类型(相互赋值的时候,赋的是内存堆中的地址)
-
类(class)
-
接口(interface)
-
数组([])
-
java类的组织形式
JDK->package->class
java的API文档
-
API(Application Programming Interface 应用程序编程接口)
- 是Java提供的基本编程接口(Java提供的类还有相关的方法)
-
Java语言提供了大量的基础类。
-
使用:直接检索
字符编码表
1. ASCII:一个字节表示,一共128个字符(实际上一个字节可以表示256个字符,它只用了128个)。
2. Unicode:字母和汉字同样都是占用两个字节,有点浪费空间。
3. utf-8:字母使用一个字节,汉字使用三个字节。
4. gbk:字母使用一个字节,汉字使用两个字节。
5. gb2312:其可以表示的汉字数量少于gbk。
6. big5码:繁体中文。
自动类型转换
-
自动数据类型转换
低精度向高精度转换
① char → int → long → float → double
② byte → short → int → long → float → double
-
多种类型计算
- 原则:所有数据转换为容量最大的那种数据类型,然后再进行计算。
- 表达式:含变量和运算符的式子
- 表达式结果的类型自动提升为操作数中最大的类型(byte、short、char运算另说)
- boolean不参与转换
- byte、short和char之间不会发生转换
- byte、short、char中只要有一个参与运算,就会自动提升为int类型
- 如:byte + short => 结果为int而不是short
//int、float、double int n1 = 10; //正确,因为默认数字是int型 float d1 = n1 + 1.1; //错误,因为表达式结果是double型 float d1 = n1 + 1.1F; //正确 double d1 = n1 + 1.1; //正确 double num3 = 3d; //正确,d代表double //byte、char、int byte b1 = 10; //正确 char c1 = b1; //错误,因为byte不能自动转为char. char c1 = 'a'; int n2 = 1; byte b2 = n2; //错误,因为int不能转为byte int n3 = b1 + c1 + n2 //正确,每个变量都会转换为int型
强制类型转换
-
案例
- 将容量大的数据类型转换为容量小的数据类型,使用时要在数据类型加上强制转换符()
- 有可能造成精度降低或者数据溢出。
int n1 = (int)1.9; System.out.println("n1=" + n1); //输出为n1=1 精度损失 int n2 = 2000; byte b1 = (byte)n2; System.out.println("b1=" + b1); //输出为b1=-48 数据溢出
- char类型可以保存 int 的常量值,但是不能保存 int 的变量值,需要强转。
char c1 = 100; //正确,输出d int m = 100; //正确 char c2 = m; //错误,因为int类型不能直接自动转换为char类型 char c3 = (char)m; //正确,加了强制类型转换符号()
-
强制转换练习
short s = 12; //正确 s = s-9; //错误,s-9为int型 byte b = 10; //正确 b = b + 11;// 错误,b+11为int b = (byte)(b+11);//正确 char c = 'a';//正确 int i = 16;//正确 float d = .314F;//正确 double result = c + i + d;//正确,float可以显式转换 byte b = 16;//正确 short s = 14;//正确 short = s + b;//错误,结果为int
基本数据类型和String类型(字符串)的转换
基本类型->String类型
- 语法:将基本类型的值 + ""即可。
int n1 = 100;
float n2 = 1,1f;
double n3 = 3.4;
boolean b1 true;
char c1 = 'li';
String str1 = n1 + "";
String str2 = n2 + "";
String str3 = n3 + "";
String str4 = b1 + "";
String str5 = c1 + "";
String类型->基本类型
- 语法:通过基本数据类型的包装类调用parseXX方法即可。
- 取出字符串指定位置的字符:s.charAt(index)
- 注意:只能把对应的字符串转成对应的数据类型
- 不能把"hello"转成一个整数
- 不能把"132"转成一个boolean
//对于字符类型char来说,若有一个字符串S5
String s5 = "123";
String s6 = "true";
s5.charAt(0); //可得到s5字符串的第一个字符:'1'
s5.charAt(2); //可得到s5字符串的第三个字符:'3'
int num1 = Integer.parseInt(s5); //num1 = 123
double num2 = Double.parseDouble(s5); //num2 = 123.0
float num3 = Float.parseFloat(s5); //num3 = 123.0
short num4 = Short.parseShort(s5); //num4 = 123
long num5 = Long.parseLong(s5); //num5 = 123
byte num6 = Byte.parseByte(s5); //num6 = 123
boolean istrue = Boolean.parseBoolean(s6); //istrue = true
第二章作业
- 将两个人的名字拼接起来,将两个中文字符相加
String a = "JT ";
String b = " anI";
System.out.println(a + b);
// JT anI
char a1 = '金';
char b1 = '土';
System.out.println(a1 + b1);
//得到 金 字符码值 + 土 字符码值(char的计算规则是转换成整数)
- 将char类型转换成string类型
char ch = '女';
String s = ch + "";
System.out.println(s); //女
System.out.println(ch+""+1); //女1
System.out.println(ch+1); //22900