Java基础之识数据类型
数据类型分类
-
基本数据类型:包括
整数、浮点数、字符、布尔。 -
引用数据类型:包括
类、数组、接口
基本数据类型

备注
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的几次方

浙公网安备 33010602011771号