Java基础之识数据类型

数据类型分类

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);
  • 字节(Byte):是计算机信息技术用于计量存储容量的一种计量单位,通常情况下一字节等于有八位, 也表示一些计算机编程语言中的数据类型和语言字符。

  • 位(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、包装类)

2、强制类型转换(显示类型转换)

1.5 赋值到int 类型变量会发生什么?产生编译失败,肯定无法赋值。

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);//后面才能讲到,借助包装类的方法才能转

运算符(Operator)

分类运算符
算术运算符 +-*/%++--
赋值运算符 =+=-=*=/=%=
关系运算符 >>=<<===!=
逻辑运算符 &|^!&&||
三元运算符 (关系表达式)?结果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++,++i)

++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

关系运算符比较运算符,是两个数据之间进行比较的运算,运算结果一定是boolean值true或者false

关系运算符符号解释
< 比较符号左边的数据是否小于右边的数据,如果小于结果是true。
> 比较符号左边的数据是否大于右边的数据,如果大于结果是true。
<= 比较符号左边的数据是否小于或者等于右边的数据,如果大于结果是false。
>= 比较符号左边的数据是否大于或者等于右边的数据,如果小于结果是false。
== 比较符号两边数据是否相等,相等结果是true。
!= 不等于符号 ,如果符号两边的数据不相等,结果是true。

逻辑运算符:是用来连接两个布尔类型结果的运算符(!除外),运算结果一定是boolean值true或者false

逻辑运算符符号解释符号特点
& 与,且 falsefalse
| truetrue
^ 异或 相同为false,不同为true
! falsetrue,非truefalse
&& 双与,短路与 左边为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的几次方

  

本文为原创文章,转载请标明出处
原文地址:https://www.cnblogs.com/harden13/p/14453942.html