您的位置:首页 > 编程语言 > Java开发

JAVASE基础(三)

2017-07-06 22:55 260 查看

1.数据类型转换

小数据类型————>大的数据类型 自动类型转换

大的数据类型———->小的数据类型 强制类型转换

强制类型转换的格式:

小数据类型  变量名 =(小数据类型) 大数据类型数据;


数据类型转换要注意的细节:

1. 凡是byte、 short、 char 数据类型数据在运算的时候,会自动的转换成int类型再运算的。

byte b1 = 1;
byte b2= 2;
byte b3 = (byte)(b1+b2);


2. 两个不同数据类型的数据在运算的时候, 结果取决于大的数据类型。

int i = 10;
long l = 20;
int sum = (int)(i+l);


2.转义字符

转义字符:特殊字符使用”\”把其转化成字符的本身输出,那么使用”\”的字符称作为转移字符。

常用的转义字符:

\b  Backspace (退格键)
\t  Tab   (Tab键盘)   制表符  制表符的意义是保证一列对齐。
\r  Carriage Return(回车)  把光标移动到一行的首位置上。
\n  Linefeed (换行)


如果在windows操作系统的文件需要换行,那么需要\r\n一起使用。 在其他操作系统上如果需要

换行只需要\n即可。

3.算术运算符

+ (正数,加法 、 连接符)


连接符: 如果数据与字符串使用+号,那么这时候“+ ”就是一个连接符。拼接字符串。

任何数据与字符串使用连接符,那么结果的类型都是字符串类型。

-
*
/(除法)
%(取模,取余数)

++(自增): 自增就是操作数+1.
前自增: ++位于操作数的前面。 先自增,后使用。
后自增: ++位于操作数的后面。 先使用,后自增,


jvm对于后自增的运行原理:

i=i++; ——-> 先运算i++ , 再运算赋值运算符(=)。

后自增要使用到没有+1之前的值。

i++的运行原理:

int temp = i; //创建一个变量保存i没有+1的值。

i = i+1; //自增

把temp的值作为运算结果返回。

int i = 0;

i = i++;

分析i = i++; 运算过程:

先算:i++;
int temp = i; // 0
i = i+1; // i =1
i = temp; // i = 0


i值变化的过程 : 0 —-> 1 ——>0

--(自减): 自减就是操作数-1.
前自减: --位于操作数 的前面。 先自减,后使用。
后自减: --位于操作数 的后面, 先使用,后自减


4.赋值运算符

=   (赋值运算符)
+=
-=
*=
/=
%=

byte b1 = 1;
b1 = b1 +1;
b1+=1; // b1 =  (byte)(b1+1);  // java编译器对于b1+=1的时候,java编译器会进行强制类型转换。我们不需要再手动转换了。


5.比较运算符

== 等于


==作用:

1. 用于基本数据类型数据比较时,判断的是两个数据是否相等。

2. ==用于引用数据类型比较的时候,那么比较的是两个变量所指向的对象是否为同一个(比较的是内存地址).

! =(不等于)
<  (小于)
>   (大于)
<=  (小于等于)
>=  (大于等于)


6.逻辑运算符

逻辑运算符: 逻辑运算符的主要作用是用于连接布尔表达式的。

&  (与,并且)


规律: 只有两边的布尔表达式都是true 的时候,结果才是true,否则就是false。

|  (或 )


规律: 只要有一边的布尔表达式为true,那么结果就为true,只有两个同时为false的时候,结果才是false。

! (非)

^ (异或)


规律:两边的布尔表达式如果结果不一致,那么结果为true。否则为false。

&&(短路与)


短路与 和 单与的区别:

相同点: 得到的结果是一样的。

不同点: 使用短路与的时候,如果左边 的布尔表达式为false 的时候,则不会运算右边的布尔表达式。结果返回结果false.

使用单与的时候,发现了左边的布尔表达式为false 的时候,还是会继续运算右边的布尔表达式的。

||(短路或)


短路或与单或的区别:

相同点: 得到 的结果是一致的。

不同点: 使用短路或的时候,如果左边的布尔表达式为true,则不会运算右边的布尔表达式了,直接返回结果true。

使用单或的时候, 即使发现了左边的布尔表达式为true,还是运算右边的布尔表达式的。

7.位运算符

位运算符 : 直接操作数据的二进制位的。

&
|
^
规律: 如果操作数A连续异或另外一个操作数两次,那么结果还是操作数A.
加密文件...
~ (取反)
System.out.println(6&3); // 2
System.out.println(6|3); // 7
System.out.println(6^3^3); // 6
System.out.println(~6);  // -7


面试题目1:定义了两个变量a ,b ,然后交换a和b的值,不准出现第三方变量。

方式一: 相加法。 缺陷:两个int值相加有可能会超出int的表示范围。
a = a+b;  // a = 8
b = a - b; // b = 8-5 = 3
a = a - b; // a = 8 - 3 = 5

方式二: 使用异或. 缺点: 逻辑不清晰。
a = a^b;  // a = 3^5
b = a^b;  // b = 3^5^5 = 3
a = a^b;  // a  = 3^5^3 = 5


面试题目2:取出下面二进制数据的低4四位数据。

00000000-00010000-00110000-11000111
&   00000000-00000000-00000000-00001111
-----------------------------------------
0111


8.移位运算符

移位运算符: 直接操作数据的二进制位

<< 左移


规律:一个操作数进行左移运算 的时候,实际上就是等于该操作数乘以2的n次方,n就是移动的位数。

面试题目: 使用最高效率的方式算出2乘以8的结果。

2<<3 = 2*2(3) = 16
2*8 = 16

>> 右移


规律: 一个操作数进行右移运算 的时候,实际上就是等于该操作数除以2的n次方,n就是移动的位数。

>>> 无符号右移


无符号右移的特殊之处: 一个操作数进行无符号右移的时候,不管该操作数是正数还是负数,左边空缺位都是使用0来补。

9.三元运算符

三元运算符的格式:

布尔表达式?值1:值2;


10.运算符优先级

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息