数据类型分类
-
基本数据类型:包括
整数
、浮点数
、字符
、布尔
。 -
引用数据类型:包括
类
、数组
、接口
基本数据类型
备注
long类型:建议数据后加L表示。 float类型:建议数据后加F表示。 char类型:使用单引号'' String类型:使用双引号""
单字符类型
char:字符类型 ;例如:'A','0','尚' 占内存:2个字节 Java中使用的字符集:Unicode编码集
布尔类型
boolean:只能存储true或false
虽然计算机底层使用0和1表示false和true,但是在代码中不能给boolean类型的变量赋值0和1,只能赋值false和true
编码表
‘A’ 对应10进制就是65,对应2进制0100 0001,机器看2进制,人看十进制
它仅仅是一个字符映射集
Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
同一 Unicode 值可以被编码成不同的二进制表示,以便在存储和网络上传输。Unicode的实现:UTF-8、UTF-16、UTF-32、UCS-2等
UTF8编码中,英文字符占用一个字节;绝大多数汉字占用三个字节,个别汉字占用四个字节。
gbk就是2个字节
java中变量
变量三要素
1、数据类型
2、变量名
3、值
变量使用注意事项
1、先声明后使用 2、在使用之前必须初始化 3、变量有作用域 4、在同一个作用域中不能重名
print &println的区别
System.out.println(输出内容);
System.out.print(输出内容);
注意事项
换行输出语句,括号内可以什么都不写,只做换行处理 直接输出语句,括号内什么都不写的话,编译报错 如果()中有多项内容,那么必须使用 + 连接起来 如果某些内容想要原样输出,就用""引起来,而要输出变量中的内容,则不要把变量名用""引起来
进制
请分别用四种类型的进制来表示10,并输出它的结果:(了解)
(1)十进制:正常表示;数字组成:0-9 System.out.println(10); (2)二进制:0b或0B开头;数字组成:0-1 System.out.println(0B10); (3)八进制:0开头;数字组成:0-7 System.out.println(010); (4)十六进制:0x或0X开头;数字组成:0-9,a~f(或A~F) System.out.println(0X10);
-
-
位(bit):是数据存储的最小单位。也就是二进制。二进制数系统中,每个0或1就是一个位,叫做bit(比特),其中8 bit 就称为一个字节(Byte)。
数据类型byte 范围-127~128 占字节1个,当定义130时就要用short 2字节,16位(00000000 00000000)
自动类型转换和强制类型转换。
(1)当把存储范围小的值(常量值、变量的值、表达式计算的结果值)赋值给了存储范围大的变量时,
int i = 'A';//char自动升级为int double d = 10;//int自动升级为double
(2)当存储范围小的数据类型与存储范围大的数据类型一起混合运算时,会按照其中最大的类型运算
int i = 1; byte b = 1; double d = 1.0; double sum = i + b + d;//混合运算,升级为double
(3)当byte,short,char数据类型进行算术运算时,按照int类型处理
byte b1 = 1; byte b2 = 2; byte b3 = b1 + b2;//编译报错,b1 + b2自动升级为int char c1 = '0'; char c2 = 'A'; System.out.println(c1 + c2);//113
(4)boolean类型不参与 ,
基本数据类型转换(boolean不参与转化并且和String无关)
String和基本数据类型之间的转化,后面讲(String、包装类)
int i = 3.14; // 错误。只有通过强制类型转换,将`double` 类型强制转换成`int` 类型才能赋值
自动转换是Java自动执行的,而强制转换需要我们自己手动执行
转换格式:
数据类型 变量名 = (数据类型)被强转数据值;
(1)当把存储范围大的值(常量值、变量的值、表达式计算的结果值)赋值给了存储范围小的变量时,需要强制类型转换,提示:有风险,可能会损失精度或溢出
int i = (int)3.14;//强制类型转换,损失精度 double d = 1.2; int num = (int)d;//损失精度 int i = 200; byte b = (byte)i;//溢出,b值改变
(2)boolean类型不参与
(3)当某个值想要提升数据类型时,也可以使用强制类型转换
int i = 1; int j = 2; double shang = (double)i/j; 提示:这个情况的强制类型转换是没有风险的
1、任意数据类型的数据与String类型进行“+”运算时,结果一定是String类型
System.out.println("" + 1 + 2);//12
System.out.println(num + "这个四位数个位上的数字是:" + ge);
2、但是String类型不能通过强制类型()转换,转为其他的类型
String str = "123"; int num = (int)str;//错误的 int num = Integer.parseInt(str);//后面才能讲到,借助包装类的方法才能转
分类 | 运算符 |
---|---|
算术运算符 | + 、- 、* 、/ 、% 、++ 、-- |
赋值运算符 | = 、+= 、-= 、*= 、/= 、%= 等 |
关系运算符 | > 、>= 、< 、<= 、== 、!= |
逻辑运算符 | & 、| 、^ 、! 、&& 、|| |
三元运算符 | (关系表达式)?结果1:结果2; |
位运算符(了解) | & 、| 、~ 、^ 、<< 、>> 、>>> |
算术运算符 | 符号解释 |
---|---|
+ |
加法运算,字符串连接运算,正号 |
- |
减法运算,负号 |
* |
乘法运算 |
/ |
除法运算 |
% |
求余运算,两个数字相除的余数 |
++ 、 -- |
自增自减运算 |
public class OperatorDemo01 { public static void main(String[] args) { int a = 3; int b = 4; System.out.println(a + b);// 7 System.out.println(a - b);// -1 System.out.println(a * b);// 12 System.out.println(a / b);// 计算机结果是0,为什么不是0.75呢? System.out.println(a % b);// 3 } }
整型数据之间的/
取商数
有浮点型数据参与/
获得的就是准确的结果(如果除不尽,会自动保留小数), ;有浮点数/ 就需要用浮点数数据类型接收,想用int就要强制类型转换
-
第一种:对于
+
两边都是数值的话,+
就是加法的意思 -
第二种:对于
+
public class OperatorDemo02 { public static void main(String[] args) { // 字符串类型的变量基本使用 // 数据类型 变量名称 = 数据值; String str1 = "Hello"; System.out.println(str1); // Hello System.out.println("Hello" + "World"); // HelloWorld String str2 = "Java"; // String + int --> String System.out.println(str2 + 520); // Java520 // String + int + int // String + int // String System.out.println(str2 + 5 + 20); // Java520 } }
++i ,先自加,后使用; 1.先自增,在赋值给++i整体 i++,先使用,后自加。 先赋值给i++整体,在自增
int i = 0; int i = i++; // 赋值,等号右边的计算结果给左边 //i++不是原子性操作 //i = i++; // _tmp = 0; i = 1; i = _tmp = 0
赋值运算符 | 符号解释 |
---|---|
= |
将符号右边的值,赋值给左边的变量 |
+= |
将符号左边的值 和右边的值 进行相加操作,最后将结果赋值给左边的变量 |
-= |
将符号左边的值 和右边的值 进行相减操作,最后将结果赋值给左边的变量 |
*= |
将符号左边的值 和右边的值 进行相乘操作,最后将结果赋值给左边的变量 |
/= |
将符号左边的值 和右边的值 进行相除操作,最后将结果赋值给左边的变量 |
%= |
将符号左边的值 和右边的值 进行取余操作,最后将结果赋值给左边的变量 |
short s = 3; // s = s + 4; 代码编译报错,因为将int类型的结果赋值给short类型的变量s时,可能损失精度 s += 4; // 代码没有报错 //因为在得到int类型的结果后,JVM自动完成一步强制类型转换,将int类型强转成short 备注s=s+4,4默认是int
关系运算符 | 符号解释 |
---|---|
< |
比较符号左边的数据是否小于右边的数据,如果小于结果是true。 |
> |
比较符号左边的数据是否大于右边的数据,如果大于结果是true。 |
<= |
比较符号左边的数据是否小于或者等于右边的数据,如果大于结果是false。 |
>= |
比较符号左边的数据是否大于或者等于右边的数据,如果小于结果是false。 |
== |
比较符号两边数据是否相等,相等结果是true。 |
!= |
不等于符号 ,如果符号两边的数据不相等,结果是true。 |
逻辑运算符 | 符号解释 | 符号特点 |
---|---|---|
& |
与,且 | 有 |
| |
或 | 有true 则true |
^ |
异或 | 相同为false ,不同为true |
! |
非 | 非false 则true ,非true 则false |
&& |
双与,短路与 | 左边为false,则右边就不看 |
|| |
双或,短路或 | 左边为true,则右边就不看 |
-
&&
和&
区别:-
&&
和&
结果一样,&&
有短路效果,左边为false,右边不执行;&
左边无论是什么,右边都会执行。
-
-
||
和|
区别:-
||
和|
结果一样,||
有短路效果,左边为true,右边不执行;|
-
数据类型 变量名 = 关系表达式?结果1:结果2
-
条件判断的结果是true,三元运算符整体结果为结果1,赋值给变量。
-
判断条件的结果是false,三元运算符整体结果为结果2,赋值给变量。
public static void main(String[] args) { int i = (1==2 ? 100 : 200); System.out.println(i);//200 int j = (3<=4 ? 500 : 600); System.out.println(j);//500 }
位运算符 | 符号解释 |
---|---|
& |
按位与,当两位相同时为1时才返回1 |
| |
按位或,只要有一位为1即可返回1 |
~ |
按位非,将操作数的每个位(包括符号位)全部取反 |
^ |
按位异或。当两位相同时返回0,不同时返回1 |
<< |
左移运算符 |
>> |
右移运算符 |
>>> |
无符号右移运算符 |
左移:<< 运算规则:左移几位就相当于乘以2的几次方 右移:>> 运算规则:右移几位就相当于除以2的几次方