数据类型与运算符
数据类型
1.基本数据类型
- 整数类型:byte(字节型)、short(短整型)、int(整型)、long(长整型);
- 浮点类型:float(单浮点型)、double(双浮点型);
- 字符型:char;
- 布尔类型:boolean.
2.引用数据类型
class(类)、interface(接口)、record(记录类型)、enum(枚举类型)、@interface(注解类型)、name[ ](数组)。
标识符
标识符用来给变量、方法、类型命名。
标识符必须以 字母、下划线、美元符$开头,区分大小写。
驼峰命名法:CamelCase --> 所有单词首字母大写;类与接口采用此法,且名词命名;
camelCase --> 第一个单词首字母小写,变量、方法名采用。
变量与赋值
大多与C语言相同;
type varname =value;
int a=1;
double b=2.718;
char s='A';
关注两点
//1. 可同时给多个变量赋值
int a,b;
a=b=1;
//2. boolean类型中的true、false与1、0不相通
boolean flag=true;//正确
boolean flag=1;//错误
基本数据类型及字面值
字面值是 某种类型 值的表示形式(记录形式);
1.整数类型字面值表示形式
十进制(日常中使用的形式,如666)、二进制(以0b或0B开头的数)、八进制(以0开头)、十六进制(以0x或0X开头)。
int a=10;//就是10;
int b=0b0110;//二进制0110等于十进制6
int c=011;//八进制11等于十进制9
int d=0x2f;//十六进制2f等于十进制47
//long类型超出int值范围必须用L表示
long num=12345678900L;
2.浮点类型字面值表示形式
//十进制数形式
double num1=3.14159;
float num2=3.14f;//float型字面值必须加f或F
//科学记数法形式
//e前必须有数字、e后指数必须为整数(可正可负)
double num3=1.234e2;//123.4
double num4=256e-3;//0.256
浮点数运算结果可能溢出,但不会因溢出而引发异常。
下溢,则结果为0;上溢,则结果为正无穷大或负无穷大(显示为Infinity或-Infinity)。
此外,若出现没有数学意义的结果,则用NaN表示,Not a Number;
浮点数可能存在舍入误差。
3.字符类型字面值表示形式
用单引号将字符括起来,不能用单引号直接括起来的符号,需要使用转义序列来表示。
常见转义字符
转义字符 | 说明 |
---|---|
\’ | 单引号字符 |
\" | 双引号字符 |
\\ | 反斜杠字符 |
\f | 换页 |
\b | 退格 |
\r | 回车 |
\n | 换行 |
\t | 水平制表符 |
4.字符串类型及字面值
//用双引号括起来
String s="Java";
String s1="Ja //一个字符串字面值不能分在两行写
va";
String s2="Ja"
+"va";//无编译错误
数据类型转换
1.自动类型转换
也称加宽转换,指将具有较少位数的数据类型转换成具有较多位数的数据类型。
虚线箭头表示的转换可能会丢失精度
布尔型数据不能与其他任何类型的数据相互转换。
2.强制类型转换
又称缩窄转换,再圆括号中给出要转换的目标类型,随后是带转换的表达式。
double d=200.5;
byte b=(byte)d;
3.表达式类型自动提升
byte a=40;
byte b=50;
// byte c=a+b; <--编译错误 ,a+b的值没有超出byte型数据的范围,但在计算表达式a+b时,编译器
// 首先将操作数类型提升为int型。
byte c=(byte)(a+b);
运算符
表示各种不同运算的符号称为运算符,参与运算的各种数据称为操作数。
1.算术运算符
算术运算符 | |
---|---|
二元运算符 | 加(+)、减(-)、乘(*)、除(/)、取余(%) |
一元运算符 | 正(+)、负(-)、自增(++)、自减(- -) |
在除法运算中,有操作数为浮点数,则结果为浮点数。
与C++不同,浮点数可以进行取余操作。
取余时,操作数含负数,作为结果的余数的符号与被除数相同且余数的绝对值小于除数的绝对值。
先去掉负号,再计算结果,结果的符号取被除数的符号。
10%3=1;
10%-3=1;
-10%3=-1;
-10%-3=-1;
10.5%2.5=0.5;
" + "运算符不但用于计算两个数值型数据的和,还可用于字符串对象的连接。
System.out.println("abc"+"de");
//当两个操作数一个是字符串而另一个为其他类型时,JVM会将另一个操作数转换成字符串,然后进行连接
int a=1,b=2,b=3;
System.out.println("sum="+(a+b+c));//"sum=6";
System.out.println("sum="+a+b+c);//"sum=123";
自增、自减运算符 在变量之前,还是在变量之前有区别
//放在后面的情况
int x=1,y;
y=x++;//先将x=1赋给y,x再自增。结果y=1,x=2;
//放在前面的情况
int x=1,y;
y= ++x;//先将x自增,再赋给y.结果y=2,x=2;
2.关系运算符
运算符 | 含义 |
---|---|
> | 大于 |
>= | 大于或等于 |
< | 小于 |
<= | 小于或等于 |
== | 等于 |
!= | 不等于 |
关系运算符一般用来构成条件表达式,比较的结果返回true或false。
任何类型的数据(基本类型和引用类型)都可以用"==“和”!="来比较是否相等,
但只有基本类型的数据(boolean除外)可以比较大小;
String类为引用类型,不能用关系运算符直接比较大小。
3.逻辑运算符
逻辑运算符的运算对象只能是布尔型数据,返回的运算结果也为布尔型。
逻辑运算符 | 形式 |
---|---|
逻辑非(!) | !A |
逻辑与(&) | A&B |
逻辑或(|) | A|B |
短路与(&&) | A&&B |
短路或(||) | A||B |
逻辑异或(^) | A^B |
我们知道,逻辑与需各条件表达式均为真时,其返回值才为真,它是要判断每一个表达式的,而短路与若左边已经有为假的表达式,后面的将不再判断,整个表达式为假。同理,对短路或,若左面已有为真的表达式,后面也不用判断,整个表达式为真。
4.赋值运算符
赋值运算符
“=”
varName = expression
赋值运算符必须是类型兼容的,即左边的变量必须能够接收右边表达式的值。
int a=10;//正确
int b=3.14;//错误
可以给对象赋值(引用赋值),将右边对象的引用值(地址)赋给左边的变量,两变量地址相同,指向同一对象。
Student s1=new Student();
Student s2=s1;
复合赋值运算符
varName op= expression;
op为运算符,将变量varName的值与expression做op运算后,结果赋给varName本身。
int a=0;
a+=6;//等同于a=a+6;
op 可以是基本的算术运算符 + , - , * , / , % ;也可是位运算符。
5.位运算符
位逻辑运算
运算符 | 功能 |
---|---|
~ | 按位取反 |
& | 按位与 |
| | 按位或 |
^ | 按位异或 |
移位运算
运算符 | 功能 |
---|---|
<< | 逻辑左移 |
>> | 逻辑右移 |
>>> | 按位无符号右移 |
位运算符只能用于整型数据,char 也归为整型。
“<<”,高位丢弃,低位补零;
“>>”,正数,高位添0;负数,高位添1,低位丢弃;
“>>>”,不论正负,高位添0,低位丢弃。