转义字符
将一个字符的原始含义进行转换,使用 \
进行转换。常用的有:
- : 专用作转义的斜杠,特殊具有歧义的都可以加上输出
- \t : 制表符,相当于一个tab键,默认的是8个字符。具体情况上下文具体而定。
- \n : 换行符代表的是换行
基本数据类型
数据类型就是数据类型,字面量也分数据类型。而不要理解为变量才有数据类型,变量的数据类型
分类
基本数据类型
用到的最多的简单类型
四类八型,这八型都是关键字
- 整数类型(整型)
- byte,字节,占用空间1字节,表示范围-128~+127
- short,占用2字节,表示范围-32768~+32767
- int,是Java中的默认整数类型(如果不指定那就是int型的常量或变量,如果超过int范围就要加后缀)。占用4个字节。-21亿~+21亿
- long,占用8个字节,用来计时间是最常见的。
- 浮点类型(浮点型)
- 浮点数的表述的都是大概的值,本身就是近似值
- float,单精度浮点类型,占用4个字节,表示小数需要在后面加上f,或者F。
- double,Java中默认浮点类型(如果不指定那它就是double的常量或变量,指定就是后面加后缀),双精度浮点类型,占用8个字节。定义浮点型带小数点的时候会默认成double型,用float都定义不了。这时候想用float定义的时候一定要再float的值后面加F才行。如果没有小数点可以不加,那不涉及浮点数。
- 字符类型(字符型)
- char,表示单个字符,占用2个字节,一个汉字占用2个字节,所以可以保存汉字,不能保存空的字符。
- 布尔类型(布尔型)
- boolean,只有两个值,true,false
- 注:
- String字符串不是基本类型,而是引用类型
- 数字类型的大小是有排序的,byte->short->int->long->float->double
- 浮点型数据表示的是一个近似值,不是具体值
- float类型接受小数必须写上“f”或者“F”
- long类型的数据,如果超过了int的范围就要加上“L”或者“l”
- 一般后缀都推荐大写
特别注意:
- 引用CSDN:这还要说java是种强类型语言,你在做赋值运算的时候其实
等号两边的类型都是确定的
,能赋值成功,要么两边类型一致,要么两边类型具备某种关系(继承或者实现),要么编译器通过上下文可以判定,比如,1、byte x = 1;1是个整数字面量,是int类型,这个值在byte类型的范围之内,这个时候编译器会帮你做类型转换,只留下int类型8位,前面的0都去掉。2、浮点类型的字面量类型默认是double,但是由于float类型和double类型在内存中的二进制表现形式不同,不能像整形那样有时会默认转换,必须要确定类型,带上f。 - 整型默认是int 超过int范围就要加后缀,告诉Java这是long型。所以给long赋值的时候当值超过int的范围就要加上
L
这样才能正确的继续追加。 - int字面量给byte赋值的时候是因为,Java检测到大小自动转换成byte。
- double给float赋值的时候就要加
F
,因为它俩不是一个模型,告诉它这是F型。 byte 和 int 是亲兄弟,所有字面量超标和缩表都要加后缀,但是这俩会自动检测大小不用额外的加。
引用数据类型
- 引用CSDN:这还要说java是种强类型语言,你在做赋值运算的时候其实
接口、一个事物的整体
String字符串和任意类型相加都是String类型
学到面向对象再细讲
变量
概念:在合理范围内能够不断变化的数据
变量在定义的时候一定要初始化,只不过成员(全局)的初始化Java有默认赋值0,使用时不会报错。但局部的初始化没有默认值,只能自己赋值,不然一使用就报错。所以可以说成一定要初始化。
定义的同时赋值
扫描二维码关注公众号,回复: 7317001 查看本文章- 数据类型 变量名 = 值;
- 数据类型 变量1 = 值1,变量2 = 值2,变量3 = 值3;
先定义,后赋值
- 数据类型 变量名; 变量名 = 值;
注:
- 同一个代码段中不能重复定义变量,可以重复赋值。
- 但是如果同名变量是的死亡了,就可以使用这个变量名了。
- 这种情况发生在,作用域内的变量死了。作用域外地变量可以使用。
- 变量要初始化才能使用。但是全局变量是可以的,全局变量是有默认值的。
- 用byte、short去做四则运算的时候会自动转成int类型。
- 同一个代码段中不能重复定义变量,可以重复赋值。
运算符
算符运算
+ - * / ++ -- %
int类型 和 int类型 运算的时候是不涉及浮点操作的,int 接收的只能是整数,小数会擦掉。
两个 变量或 常数 整数相运算的结果是整数,要想带小数的只能让数据与小数运算,要么它本身带小说本身就是小说,要么去和1.0这种数运算一下,不损失数据。
两种类型的数据运算,结果会编程精度大的那个。
除法,整数之间的除法会发生精度流失。
- 取模,模数的符号是来自被取模的符号。
整除的结果是0 结果的正负号取决于被模数的正负
加法:
求和
字符串的拼接,字符串的数据和任何类型的数据用“+”拼接最后都会变成字符串。
"5+5="+5+5 输出 5+5=55 错的 "5+5="+(5+5) 输出 5+5=10 对的 只要改变计算的优先级就可以解决,程序是顺序执行的
字符类型与整数的相加相减,就是对ASCII码进行加减。最后的结果根据返回类型进行返回。会将字符数据转换成对应的十进制整数,再与整数相加。
Unicode 码表,前128位与ASCII码表相同,并且收录了各个国家地区的码表。万能表。
++ --
- ++x 等价于 x = x +1;
- 计算时从左向右的
- 自身单独操作时符号前置后置都是可以的,不影响结果
- 后置代表先把这个一元运算执行一遍(过一遍),一遍之后他的值再改变,这个后改变的值已经和先前执行过的值没有关系了。这个改变的值相当于只能为下一次用到这个值做准备。简单点就是:先执行再赋值(变值)。
- 前置代表先赋值(变值)再执行其他操作。
- 小数也是可以进行,计算的。
- 赋值运算符
= += -= *= /= %=
- = :赋值
- += :i += 3; 等价于 i = i +3;
- 注:
- 常量不能被赋值
- 比较运算符
== > < >= <= !=
比较运算的结果是boolean值- == :是否相等
- !=:判断两数是否不等
- 逻辑运算
& | ! && || ^
逻辑运算的结果也是Boolean值- & :与,判断式的两边是否同为真,同为真才是真
- | :或,只要有一边为真就是真
- ! :非,取反
- ^ :异或,不同时为真
- && :和&的作用一样只是先判断左边,当判断左边为假的时候就不判断右边了。返回结果。而&会两边都判断。工作中用的多
- || :只要判断左边为真的时候直接就返回真。右边不判断。工作中用的多
- 三元运算
三元运算表达式的结果必须得到一个确切的值- 格式:表达式1?表达式2:表达式3;
- 逻辑:表达式1为真,执行表达式2,表达式1为假执行表达式3。
位运算
只有是常数的时候才会进行位运算,将十进制数转换成二进制数。根据逻辑与、或进行运算,最后转成十进制。或 System.out.println(3 | 4); 输出 7 与 System.out.println(3 & 4); 输出 0 或 System.out.println(3 | 10); 输出 11
左移
System.out.println(3 << 1); 输出 6 将3向转换成二进制,然后向左移1位,变大了。 其实就是 3*2^1 比如 3 << 4 就是 3*2^4 等于 48
类型转换
不同数据之间是否可以一起运算? 是可以的。
自动类型转换(隐式)
- 概念:不同数据类型运算时,数据范围小的数据类型,会自动转换成范围大的数据类型,不流失精度,是合理常用的方式,小可转大。但是数据范围大的数据不能转换成数据范围小的数据,不管值是大是小,只能使用强制类型转换。因为它比较的不是值的大小,而是类型范围大小。只要类型的范围比转的类型范围大,都要强转。但是强转会导致精度流失,不推荐的。这里提到的变量类型不只是变量,同时还有字面量也是
- 范围:byte->short->int->long->float->double
- 疑问:大转小不行,但为什么可以
short x = 8;
这样给short赋int类型的值可以呢?没错它的确是int类型,但是Java检测到它是符合范围的,所以可以赋值。但是如果这样int x = 8;byte s = x;
这样就不可以,因为Java不知道x的值是多少所以是不可以的,恰巧ide知道所以ide提前给你报错。 - 特别注意:
- **在java运算中,在涉及到数据类型范围小于int的(如byte,char,short)时,数据类型会自动提升为int类型,当他们的结果提升为int型的时候就不能用小于int的类型接收数据了,最差也要强转,不然出错。比如,两个byte类型的数据在进行运算时,运算结果就会变成int类型,如果要结果是byte类型的话,就要强转成byte类型,这是因为java编译器内部对其进行处理。比如:char*short就是int类型。比如:char+float=float这就不是三者内部运算了。这里要明白,不知三者自己之间运算会提升为int,即使三者外大于int的其他类型计算也会提升为int,从char+float的结果为数字就可以看出。**
- 自增自减本身存在强制转换,不会报错
++ -- += *= /=
。
bb = (byte)(bb + 1); 不报错 以int运算返回int,又转成byte bb = (byte)bb + (byte)1; 报错 最后又变成int进行运算,返回int
强制类型转换(强转)
- 基本数据类型不建议数据类型转换的,也称为强制类型转换。
- 作用:使用特定的格式将数据范围大的类型转换成数据范围小的数据类型。
- 格式:范围小的数据类型 变量名 = (目标类型) 范围大的数据值;
- 注:日常生活中基本不使用对基本数据类型进行转换,强制转换,因为大部分的转换都会导致精度流失,这么做处理能让它不报错,没有好处。
基本数据类型不建议用强制类型转换。
总结
- 类型范围小转大可以
- 类型范围大转小不行,要强转,会失精
- short byte char 三者互相四则运算会转 int 因为它们的范围太小
++ -- += 等会自动强转