JAVA数据类型与运算符

数据类型与运算符

1.变量和类型
变量指的是程序运行时可变的量,相当于开辟了一块空间来保存一些数据。
类型则是对变量的种类进行了划分,不同的类型的彼岸连那个具有不同的特性。
变量主要是和我们的“内存”这样的硬件设备密切相关:
在这里插入图片描述
1.1整形变量
基本语法格式
int 变量名=初始值
代码示例:

int num=10;
System.out.println(num);

整型 int 是4个字节 和操作系统没有直接关系
!!!什么是字节???
字节是计算机中表示空间大小的基本单位。
计算及使用二进制表示数据,8个二进制位(bit)为一个字节(Byte)
1KB=1024Byte
1MB=1024KB
1GB=1024MB
4个字节表示的数据范围是-21亿-21亿

java中整型查看整形数据范围

System.out.println(Integer.MAX_VALUE);//int 最大值
System.out.println(Integer.MIN_VALUE);//int 最小值

1.2长整型变量
基本语法格式:
long 变量名=初始值
代码示例:

long num=10L;
System.out.println(num);

给初始值时 后面加L
long类型占8个字节
大部分使用long类型来表示数据
1.3双精度浮点型
基本语法格式:
double 变量名=初始值
代码示例:

double num=1.0;
System.out.println(num);

1.4单精度浮点型
基本格式:
float 变量名=初始值
代码示例:

float num=1.0f;
System.out.println(num);

浮点型的数据优先考虑用double
1.5字符类型
基本格式:
char 变量名=初始值
代码示例:

char ch=‘A’;

char 字符类型 0-65535 没有负数
注意:
1.Java中使用单引号+单个字母的形式表示字符字面值。
2.计算机中的字符本质上是一个整数,在C语言中使用ASCII表示字符,而Java中使用Unicode表示字符。因此一个字符占用两个字节,表示的字符种类更多,包括中文。
3.使用一个字符表示一个汉字:

char ch=‘呵’;
System.out.println(ch);

4.有中文的时候编译的时候要加-encoding UTF-8
1.6字节类型
基本语法格式:
byte 变量名=初始值
代码示例:

byte value=0;
System.out.println(value);

Java当中的字节类型 对标的是c语言里面的char
定义一个类型数据不能超过最大取值或者最小取值
注意:
1.字节类型表示的也是整数,只占一个字节,表示范围-128-127
2.字节类型和字符类型互不相干
1.7短整型
基本语法格式:
short 变量名=初始值
代码示例:

short value=0;
System.out.println(value)

注意:
1.short占用两个字节,表示范围为-32768-》32767
2.不推荐使用
1.8布尔类型
基本语法格式:
boolean 变量名=初始值
代码示例:

boolean value=true;
System.out.println(value);

注意:
1.boolean类型的变量只有两种值,true表示真,false表示假。
2.Java的boolean类型和int不能相互转换,不存在1表示true,0表示false这样的用法

  1. 没有字节大小
    1.9字符串类型
    基本语法格式:
    String 变量名=初始值
    代码示例:
String name = "zhangsan";
System.out.println(name)

字符串类型 string str=“hello” 并没有说有\0结尾
.charAt(i) 访问字符串第i个字符
.indexOf(字符) 返回字符第一次出现的下标
注意:
Java使用双引号+若干字符的方式表示字符串字面值。
String不是基本类型,而是引用类型
转义字符:
\n 换行
\t 水平制表符
’ 单引号
" 双引号
\ 反斜杠
字符串的+操作,表示字符串的拼接:

String str = "result = ";
int a = 10;
int b = 20;
String result = str + a + b;
System.out.println(result)//执行结果:
result=1020

当一个+表达式中存在字符串的时候,都是执行字符串拼接行为

int a=10int b=20;
System.out.println("a="+a+",b="+b);

1.10变量的作用域
局部变量的作用域为方法体内
1.11变量的命名规则
硬性指标:
1.一个变量名只能包含数字,字母,下划线
2.数字不能开头
3.变量名是大小写敏感度,即num和Num是两个不同的变量
软性指标:
1.变量命名要具有描述性,见名知意
2.变量名不宜使用拼音
3.变量名的词性推荐使用名词
4.变量命名推荐小驼峰命名法,当一个变量名由多个单词构成的时候,除了第一个单词外,其他单词首字母都大写
1.12常量
常量指的是运行时类型不能发生改变
1.12.1 字面值常量

  • 10 int字面值常量(十进制)
  • 010 int字面值常量(八进制)由数字0开头
  • 0x10 int字面值常量(十六进制)由数字0x开头
  • 10L long字面值常量
  • 1.0 double字面值常量
  • 1.5e2 double字面值常量,1.5*10^2
  • 1.0f float字面值常量
  • true boolean字面值常量
  • ‘a’ char字面值常量 “abc”
  • String字面值常量
    1.12.2 final关键字修饰的常量
final int a=10;
a=20

1.常量不能在程序运行过程中发生修改
2.java:final定义一个常量 可以不再定义同时进行初始化 但是一旦初始化就不能被改变
3.final不仅可以修饰变量 也可以修饰:函数 类 接口…
1.13理解类型转换
int和long/double相互赋值

int a = 10;
long b = 20;
a = b;                     // 编译出错, 提示可能会损失精度.
b = a;                     // 编译通过.
int a = 10;
double b = 1.0;
a = b;                     // 编译出错, 提示可能会损失精度.
b = a;                     // 编译通过

long表示的范围更大,可以将int赋值给long,但是不能将long赋值给int

结论
1.不同数字类型的变量之间赋值,表示范围更小的类型能隐式类型转换成范围较大的类型,反之则不行
2.int和boolean是毫不相干的两种类型,不能相互赋值
3.使用byte表示的数据范围是-128-》127,超过范围编译不能通过
4.小类型给大类型 发生隐式类型转换
5.大类型给小类型 需要进行强制类型转换 (类型)
使用强制类型转换:使用(类型)的方式可以将double类型强转为int,但是
1.强制转换可能会导致精度丢失
2.强制类型转换不一定会成功,互不相干的类型之间无法强转
3.char 和 short 互相转换都需要强转
理解数值提升
1.当int和long混合运算的时候,int会提升为long,得到的结果依然是long类型,需要使用long类型的变量来接受结果,如果非要用int来接受结果,就必须使用强制类型转换
2.CPU是以四个字节为单位进行读写数据,所有不够4个字节的数据都要先提升为int
3.对于short,byte这种比4个字节小的类型,会先提升4个字节的int,在运算
在这里插入图片描述
2.运算符
2.1算术运算符
基本四则运算+ - * / %

a)int/int结果还是int,需要使用double来计算

int a=1;
int b=2;
System.out.println(a/b);

//结果为0

b)0不能作为除数

int a=1;
int b=0;
System.out.println(a/b);

//运行结果
Exception in thread "main".java.lang.ArithmeticException;/by zero at Test.main(Test.java:5)

c)%表示取余,不仅仅可以对int求模,也能对double来求模

System.out.println(11.5%2.0);

//运行结果  1.5
  • 增量赋值运算符 += -= *= /= %=
int a=10;
a+=1;              //等价于a=a+1
System.out.println(a);
  • 自增自减运算符 ++ –
int a=10;
int b=++a;
System.out.println(b);
int c=a++;
System.out.println(c);

结论
1.如果不取自增运算的表达式的返回值,则前置自增和后置自增没有区别
2.如果取表达式的返回值,则前置自增的返回值是自增之后的值,后置自增的返回值是自增之前的值
2.2关系运算符
关系运算符主要有6个:== != < > <= >=

int a=10;
int b=20;
System.out.println(a==b);
System.out.println(a!=b);
System.out.println(a<b);
System.out.println(a>b);
System.out.println(a<=b);
System.out.println(a>=b);

注意:
关系运算符的表达式返回值都是boolean类型
2.3逻辑运算符
主要有3个: && || !
注意:逻辑运算符的操作数(操作数往往是关系运算符的结果)和返回值都是boolean
逻辑与&&
规则:两个操作数都为true,结果为true,否则结果为false

int a=10;
int b=20;
int c=30;
System.out.println(a<b&&b<c);

逻辑或||
规则:两个操作数都为false,结果为false,否则结果为true

int a=10;
int b=20;
int c=30;
System.out.println(a<b||b<c);

逻辑非!
规则:操作数为true,结果为false;操作数为false,结果为true(这是个单目运算符,只有一个操作数)

int a=10;
int b=20;
System.out.println(!a<b);

//编译错误

短路求值
&&和||遵守短路求值的规则

System.out.println(10>20&&10/0==0)//打印false
System.out.println(10<20||10/0==0)//打印ture

结论:
1.对于&&,如果左侧表达式值为false,则表达式的整体的值一定是false,无需计算右侧表达式
2.对于||,如果左侧表达式值为true,则表达式的整体的值一定是true,无需计算右侧表达式
&和|
&和|如果操作数为boolean的时候,也表示逻辑运算,但是和&&以及||相比,他们不支持短路求值

System.out.println(10>20&10/0==0);//程序异常
System.out.println(10<20|10/0==0);//程序异常

2.4位运算符
Java中对数据的操作的最小单位不是字节,而是二进制位
位运算符主要有4个: & | ~ ^
位操作表示按二进制位运算,计算机中都是使用二进制来表示数据的,按位运算就是在按照二进制位每一位依次进行运算
**按位与&:**如果两个二进制位都是1,则结果为1,否则结果为0

int a=10;
int b=20;
System.out.println(a&b);

进行按位运算,需要先把10和20转成二进制,分别为1010和10100

0   1   0   1   0     《=10
1   0   1   0   0     《=20

按位或|:如果两个二进制位都是0,则结果是0,否则结果为1

int a=10;
int b=20;
System.out.println(a|b);

**注意:**当&和|的操作数为整数(int short long byte)的时候,表示按位运算,当操作数为boolean的时候,表示逻辑运算
**按位取反~:**如果该位为0则转为1,如果该位为1则转为0

int a=0xf;
System.out.printf("%x\n",~a);

**按位异或^:**如果两个数字的二进制位相同,则结果为0,相异则结果为1

int a=0x1;
int b=0x2;
System.out.printf("%x\n",a^b);

2.5移位运算
移位运算符有3个: << >> >>>
**左移<<:**最左侧位不要了,最右侧补0
**右移>>:**最右侧位不要了,最左侧补符号位(正数补0,负数补1)
**无符号右移>>>:**最右侧位不要了,最左侧补0
1.左移1位,相当于原数字2,左移N位,相当于2^N
2.右移1位,相当于原数字/2,右移N位,相当于/2^N
2.6条件运算符
只有一个: 表达式1?表达式2:表达式3
当表达式1的值为true时,整个表达式的值为表达式2的值;当表达式1的值为false时,整个表达式的值为表达式3的值

//求两个数最大值
int a=10;
int b=20;
int max=a>b?a:b;

3.注释

  • 单行注释://注释内容
  • 多行注释:/注释内容/
  • 文档注释:/*文档注释/(常见于方法和类上描述方法和类的作用),可用来自动生成文档

4.关键字
在这里插入图片描述
注意:定义的变量名不能和关键字重名。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值