Java编程基础(二)
一.数据类型转换
(1)自动类型转换
范围小的数据类型值,转换为范围大的数据类型的值。
例如 byte int 自动 byte 转换为 int
byte->short->int->long->float->double
package com.huawei;
public class VariableTest1 {
public static void main(String[] args) {
//自动类型转换
int i=666;
double d;
/**
* 这一块就是自动类型转换,因为并没有指定将i转换为double
* 直接使用i
*/
d=i;
System.out.println("转换之前i="+i);
System.out.println("转换之后的d="+d);
}
}
结果:
转换之前i=666
转换之后的d=666.0
Process finished with exit code 0
(2)强制数据类型转换
数据范围大的转换为数据类型小的。强制类型转换不会报错,只是损失了精度。
例如:喝多了::: 记不住 精度 就丢失了, double 2.134 --> int 2 0.134 没了。
数据类型之间进行强制转换。比如:int 转换为 String 或者 String转换为 int
String与日期类型 转换。 “2018-11-6 20:37:66:002”–>Date 先记住 后面会在API
//强制类型转换
int i;
double d=998.99;
/**
* 强制类型转换需要 ()--->括号里面放需要强制转换的类型
* 例如double转int 小括号就是 (int)
*/
i=(int)d;
System.out.println("强制转换前d="+d);
System.out.println("强制类型后i="+i);
结果:
强制转换前d=998.99
强制类型后i=998
二.算术运算符
加减 乘除 求余运算 + - * / %
运算后赋值.赋值运算
+= 相当于+完之后赋值 例如int a=0 a+=10;相当于a=a+10;
-=
/=
关于/,一定记得0不能作为除数,否则会出现异常
关于string+或者+=都是表示拼接,并不是运算.
例如String s=“120”;
s+=111;
结果:s=120111
package com.huawei;
/**
* 算术运算符
* @author ql
* @version 1.0
*/
public class Operator {
public static void main(String[] args) {
//定义变量
int a=1;
int b=2;
int sum;
int sub;
int mul;
double dvd;
int mod;
//算术运算符 基本运算
//加法
sum=a+b;
//减法
sub=b-a;
//乘法
mul=a*b;
//除法
dvd=a/b;//先计算a/b 这是整数的除法 1/2=0,然后再把结果赋值给了dvd 0.0
dvd=a/(b*1.0);//先计算时,需要先把int转化为double 1.0/2.0 结果0.5
System.out.println("加法,a+b="+sum);
System.out.println("减法,b-a="+sub);
System.out.println("乘法,a*b="+mul);
System.out.println("除法,a/b="+dvd);
System.out.println("除法,a/(b*1.0)="+dvd);
}
}
结果:
加法,a+b=3
减法,b-a=1
乘法,a*b=2
除法,a/b=0.5
除法,a/(b*1.0)=0.5
三.自增自减运算符
++ – int a; 都代表1次
a++:表示自己增加1 ; 表示先使用变量 a ,再进行自加运算
++a:表示自己增加1;表示先自加运算,再使用变量a
a–:表示自己减少1 ; 表示先使用变量 a ,再进行自减运算
++a:表示自己减少1;表示先自减运算,再使用变量a
一般实在循环时候使用–后面会讲流程控制时会详细讲
package com.huawei;
/**
* 自增自建运算符
* (1) ++a先计算后使用
* (2)a++先使用后计算
* (3)++ 一次 代表 增加1
* @author ql
* @version 1.0
*/
public class VariableTest2 {
public static void main(String[] args) {
int a=1;
int b=++a*(++a);
int c=a++*(++a);
System.out.println("此时的a="+a);
System.out.println("此时的b="+b);
System.out.println("此时的c="+c);
}
}
结果:
此时的a=5
此时的b=6
此时的c=15
四.比较运算符
比较 > < <= >= == !=
进行数据的比较, 最后的结果为一个Boolean类型的结果.
条件语句.(if else case while)
package com.huawei;
import java.util.Scanner;
/**
* 通过键盘获得身高,然后进行比较
* 键盘获得输入,通过scanner类获得
* @author ql
* @version 1.0
*/
public class ComparisonHeigth {
public static void main(String[] args) {
//1.获得身高的输入
Scanner scan = new Scanner(System.in);
System.out.println("请输入A的身高(cm为单位,整数): ");
//获得A身高的整形输入
int height_A=scan.nextInt(); //nextInt()是scanner类自带函数
System.out.println("请输入B的身高(cm为单位,整数): ");
//获得B身高的整形输入
int height_B=scan.nextInt();
//2.比较身高
System.out.println("A的身高是否大于等于B的身高"+(height_A>=height_B));
}
}
结果:
请输入A的身高(cm为单位,整数):
170
请输入B的身高(cm为单位,整数):
190
A的身高是否大于等于B的身高false
五.逻辑运算符
逻辑与
&: 表示只有表达式两边都是 true 结果才为 true
&&:表示只有表达式两边都是 true 结果才为 true
区别:短路,提前结束这个判断过程。
&& 如果第一个条件为 false 则 后面的语句不再运行。 可以加快速度。
&: 不具有短路功能,从左到右 依次执行。
package com.huawei;
/**
*逻辑运算
* @author ql
* @version 1.0
*/
public class LogicalOperator {
public static void main(String[] args) {
int a=1;
int b=2;
boolean flag=a>b && b++>=2;//短路
System.out.println("flag="+flag+",b="+b);
}
}
结果:
flag=false,b=2
package com.huawei;
/**
*逻辑运算
* @author ql
* @version 1.0
*/
public class LogicalOperator {
public static void main(String[] args) {
int a=1;
int b=2;
boolean flag=a>b & b++>=2;//不具备短路功能
System.out.println("flag="+flag+",b="+b);
}
}
结果:
flag=false,b=3
逻辑或
|| :有一个为true就为true
|:有一个为 true 就为 true
区别: 短路,提前结束这个判断过程。
||:如果第一个条件为 true 那么后面不再判断,直接输出为 true;
|:不具有短路功能,从左到右 依次执行
package com.huawei;
/**
*逻辑运算
* @author ql
* @version 1.0
*/
public class LogicalOperator {
public static void main(String[] args) {
int a=1;
int b=2;
boolean flag=a>b || b++>=5;
System.out.println("flag="+flag+",b="+b);
}
}
结果:
flag=false,b=3
package com.huawei;
/**
*逻辑运算
* @author ql
* @version 1.0
*/
public class LogicalOperator {
public static void main(String[] args) {
int a=1;
int b=2;
boolean flag=a>b | b++>=5;
System.out.println("flag="+flag+",b="+b);
}
}
结果:
flag=false,b=3
逻辑非
! 非真即假 非假即真。
六.位运算符
主要针对二进制数.只有0 1 两种形态
&: 位与 两个数同时为1 则为1
|: 位或 两个数中有一个为1 则为1 否则为0
^: 异或 相同为0 不同为1
右移运算符:>> 代表位数向右移动
左移运算符:>> 代表位数向左移动
无符号右移:>>>
package com.huawei;
/**
* 位运算符 需要转为2进制 目前都是十进制数,运算的时候程序会自动转
*/
public class BitOperator {
public static void main(String[] args) {
int a=5;
int b=1;
//位与运算
System.out.println("1&5="+(a&b));
//位或运算
System.out.println("1|5="+(a|b));
//位异或运算
System.out.println("1^5="+(a^b));
a=21;
//右移运算
System.out.println("21>>1="+(a>>1));
//左移运算
System.out.println("21<<1="+(a<<1));
a=-10;
//无符号右移与右移运算的区别
System.out.println("右移运算 -10>>1="+(a>>1));
System.out.println("无符号右移运算 -10>>>1="+(a>>>1));
}
}
结果:
1&5=1
1|5=5
1^5=4
21>>1=10
21<<1=42
右移运算 -10>>1=-5
无符号右移运算 -10>>>1=2147483643
七.三元运算符
布尔表达式?结果1:结果2
如果布尔表达式的结果为 true ,进行结果1
如果布尔表达式的结果为 false ,进行结果2
package com.huawei;
/**
* @author ql
* @version 1.0
*/
public class ThtOpertor {
public static void main(String[] args) {
int a=1;
int c=a>2?0:1;
System.out.println("c="+c);
}
}
结果:
c=1
八.转义运算符
字符并不是你看起来的那样子,转义了.
a.八进制转义
+用1-3位8进制数字,范围’000’–‘377’
例如: \0;
package com.huawei;
/**
*八进制转义字符
* @author ql
* @version 1.0
*/
public class EscapeCharecter {
public static void main(String[] args) {
char c='\0';
//大写字母A对应ascII 65转成8进制
char c2='\101';
System.out.println("c2="+c2+",c="+c);
}
}
结果:
c2=A,c=
b.unicode 转义字符
\u+ 4位十六进制数字:0-65535
package com.huawei;
/**
* @author ql
* @version 1.0
*/
public class EscapeCharecter {
public static void main(String[] args) {
/**
* 16进制Unicode转义字符 范围更广
* 对应的十进制33
*/
char c3='\u0021';
System.out.println("c3="+c3);
}
}
结果:
c3=!
c、特殊字符
":表示双引号
':单引号
\:反斜线
*我爱“Young”老师,It’s nice.*\
package com.huawei;
/**
* @author ql
* @version 1.0
*/
public class EscapeCharecter {
public static void main(String[] args) {
/**
* 特殊字符
*/
String s=" \\*我爱\"Young\"老师,It’s nice.*\\";
System.out.println("s="+s);
}
}
结果:
s= \*我爱"Young"老师,It’s nice.*\
d、控制字符
\r :回车
\n: 换行
\t: tab
\b:退格