Java中的变量,类型转换,运算符和变量间的运算

一 .变量:1.基本数据类型(8种)

整型: (整型的默认类型为int)

定义long型变量,值的末尾加上“L”或“l”,如long m=3.55L;
byte(-128~127) 1字节   位bit   1字节=8bit
short(-2^15~2^15-1) 2字节
int(-2^31~2^31-1) 4字节
long(-2^63~2^63-1) 8字节

浮点型:(浮点型的默认类型为double)
定义float型变量,值的末尾加上“F”或“f”,如float f=4.2F;
float 4字节
double 8字节

字符型(=2个字节):char只能表示一个字符(英文、中文、标点符号等)
char c1='a';
char c2='好';
char c3='\t'; 可以表示转义字符

布尔类型:boolean 只能够取值为true或false。不能取null。

2.引用数据类型(类、接口、数组):如String类。

二.类型转换

1.自动类型转换:当容量小的数据类型与容量大的数据类型做运算时,容量小的会自动转换为容量大的数据类型。
char,byte,short ===> int ===> long ===> float ===> double

当char\byte\short之间做运算时,默认的结果为int类型 比如 short+byte , char+byte , short+short 等结果都为int。

2.强制类型转换:可以将容量大的数据类型转换为容量小的,要使用强制类型转换符:(type)

    强制类型转换的问题:可能会导致精度的损失。

三.运算符和变量间的运算

1.算数运算符:+(正) -(负) +(加) -(减) *(乘) /(除) %(取模) ++(自增) --(自减) +(字符串连接)

取模的结果取决与被模数,被模数为正,则结果为正,被模数为负,结果为负。

++(自增)有前++和后++之分,前++就是先自增后使用,后++就是先使用后自增,比如:                    

int i=5;
int j=5;
int k=++i;
int l=j++;    //最后输出的话,i、j和k的值为6,l的值为5。

同理自减也一样。

由于有自动类型转换的问题,所以如下代码会出现编译错误:

short s=1;
s=s+1;            //原因:因为s+1自动转换为int型,int到short会损失精度,出现编译错误。                 

(+)字符串连接:

如果一个运算中包含字符串,其结果也肯定为一个字符串,如下:

当"abc"+3+5时,其结果为"abc35"的字符串,但当3+5+"abc"时其结果为"8abc"的一个的字符串。

区分'a'+3+'b'和"a"+3+"b":第一个结果为int类型,第二个结果为String类型。

2.赋值运算符:= += -= *= /= %=        (要区分=(赋值)和==(等于)的区别)

由于有自动类型转换,所以上述    short s=1; s=s+1;  的代码会出现编译错误。

而当 short s=1; s+=1; 的时候就不会报错。 原因:+=不会改变s的数据类型。

+= -= *= /= %= 都不改变左边数据的数据类型。比如 int i=1; i*=0.1; 结果i=0   原因:i为int类型,i*=0.1不改变i的类型,所以就相当于i=(int)(i*0.1),所以结果为0。

3.关系运算符:==     !=     <     >     >=     <=     instanceof(检查是否是类的对象)

"ABC" instanceof String,就是表示    字符串ABC 是否为 String 类的对象。

关系运算符最终的结果都是boolean类型,只能是true或者是false。

4.逻辑运算符:&(逻辑与)    &&(短路与)    |(逻辑或)    ||(短路或)    !(逻辑非)    ^(抑或)

逻辑运算符要求运算符两端都为boolean类型的值,其结果为true或false,所以判断a是否在1到3之间不能写成1<a<3,因为1<a只能是true或者是false,然后就不能与3比较;应该写成a>1&&a<3。

&与&&的区别:&:不管左边是true还是false,右端都会进行运算。
         &&:当左端为false时,右端不再进行运算。
   使用时,通常使用&&。
|与||的区别:    |:当左端为true时,右端照样做运算。
      ||:当左端为true时,右端不再进行运算。

      使用时,通常使用||。

^:两边的boolean值相反结果为true。

5.位运算符:<<(左移)    >>(有符号右移)    >>>(无符号)    &(与)    |(或)    ^(抑或)    ~(反码)

 位运算符是对二进制数进行运算。位运算符两端都是数值型的数据。

<<左移几位就相当于×2^左移位数 ,当左移位数过多时,数据会出错,可能将整数变成负数。

有符号右移和无符号右移时当数为正数时,结果相同。

当数为负数时,>>有符号右移几位,左边就补几个1,>>>无符号右移几位,左边就补几个0。

&与,当两个数的二进制数的同一位都为1时,结果为1,否则为0。
|或,当两个数的二进制数的同一位中某一位为1时结果为1,如果都为0,结果为0。
^抑或,当两个数的二进制数的同一位相抑时,结果为1,否则结果为0。

~取反,一个数字的二进制数的每一位都取反。0变1,1变0。

可以通过位运算手动的将十进制数转换为十六进制数输出。比如:00001111代表的数为15,将其与任一一个int型进行^操作,都能得到该数的二进制数的低四位,可以将其转换为十六进制数。再将该int型数进行>>4的操作后与15进行^操作可以得到该int数的二进制数的5-8位,将其转换为十六进制数,依此直到完全将其转换。

也可以通过^运算交换两个数的位置。理由:(m^n)^m=n        (m^n)^n=m

6.三元运算符:(条件表达式)?表达式1:表达式2;  为真,取表达式1;为假,取表达式2。

要求:表达式1与表达式2为同种数据类型。既然是运算符,就一定会有运算的结果,结果的数据类型与表达式1,2的类型一致。

三元运算符在一定程度上可以与if-else互换。(三元运算符一定可以转换为if-else,反之不一定成立。)

可以通过三元运算符求出两个数的最大值等。

 
 

猜你喜欢

转载自blog.csdn.net/mycsdn1997/article/details/80265914