一、进制转换
1.1 其他进制转十进制(以十六进制为例):
十六进制范围:0-9, A-F对应数字10-15
2A7E(16) = 14*16(0) +7*16(1) + 10*16(2) + 2*16(3) = 10878(10)
1.2 十进制转二进制:将十进制数除以2,取余数,将最后一位余数排在第一位,倒数第二位的数排在第二位,依次排列,构成的01数字串即为表示该十进制数的二进制数。
总结:十进制%二进制 余数 0-1(Java中符号 “%”表示取余),逆序排列。
(图片引自百科)
1.3 十进制转八进制:十进制%八进制 余数 0-7,逆序排列。
为了区分十进制在数前加0区分 202 ----0312
1.4 十进制转16进制:十进制%16进制 余数 0-9 A-F(),逆序排列。
为了区分十进制在数前加0x区分 1203 --- ox4B3
二、数据类型之间的转换
两种方式:隐式转换和强制转换
2.1 隐式转换
存储范围从小到大自动实现隐式转换
byte b1 = 3;
byte b2 = b1 + 4; //隐式转换
int i = b1; 隐式转换
例程:Demo1.java
1 public class Demo1{ 2 //基本类型的隐式转换 3 public static void main(String [] args) { 4 //byte b = 128; 5 byte b1 = 1; 6 //byte b2 = b1 + 1; //隐式转换,结果byte转为int,报错 7 byte b3= 2+3; // 没隐式转换,byte 不会报错 8 int i=b1; //隐式转换 9 10 short s = b1; 11 //short s1 = 1 +s; 12 13 char c = ‘1‘; 14 int i1 = c + 1; // 50 隐式转换 15 System.out.println(i1); 16 System.out.println("b1的值为"+b1); 17 System.out.println(b3); 18 System.out.println(i); 19 System.out.println(s); 20 } 21 22 }
注:byte short与 char 之间没有隐式转换
2.2 强制转换:存储范围从大范围数据类型到小范围数据类型强制转换。
小范围数据类型 变量名 = (小范围数据类型) 数据
double ->float->long->int->short->byte
-char
int i = 1;
byte b = (byte) 1;
例程:Demo2.java
1 public class Demo2 { 2 public static void main(String[] args) { 3 // 基本数据的强制转换 4 int i = 4; 5 byte b = (byte) i; 6 System.out.println(b); 7 8 double d = 4.3536; 9 float f = (float) d; 10 long l = (long)d ;//强转导致数据精度丢失 11 System.out.println(l); 12 13 int i2 = 128; 14 byte b2 = (byte) i2; // -128 强制类型转换造成数据溢出 原码 反码 正数不变负数各位取反, 补码:正数不变负数反码+1; 15 System.out.println(b2); 16 } 17 18 }
注:强制转换可能造成数据的溢出或者精度的丢失。
三、引用数据类型
3.1 除了基本数据类型外,其他数据类型都是引用数据类型。
String Arrays Scanner
String :字符串。Java中用双眼号内,“内容”的数据称为字符串
eg: “1235” “我按你你们慢慢”
3.2 思考:Java中char 类型数据能不能存储一个汉字?
答:能;
因为Java中编码格式采用Unicode编码,Unicode编码中一个英文或一个汉字各占两个字节,char类型能够储存两个字节的数据。所以可以。
例子Demo3.java
1 public class Demo3 { 2 public static void main (String [] args) { 3 4 //引用类型String的运用 5 String s1 = "I Love "; 6 System.out.println(s1); 7 8 // 算术运算符+号的运用 9 System.out.println(1 + 2 + 3 + 4); // 10 加法运 运算没有优先级左到右依次执行 10 System.out.println(1 + 2 + "字符串"); // "3 字符串“ 先加法运算,后字符串拼接 11 System.out.println(1 + 2 + 3 + "4"); // "64" 12 System.out.println(1 + 2 + "3" + 4); // "334" 13 System.out.println(1 + "2" + 3 + 4); // "1234" 14 System.out.println("1" + 2 + 3 + 4); // "1234" 15 } 16 17 }
四、运算符
3.1分类:算术运算符、关系运算符、逻辑运算符、按位运算符、条件运算符
3.2算术运算符
+ - * / % ++ --
1、+ :在Java中既可以做加法运算也可做拼接。
当+ 号两边都是整型或浮点型时做加法运算,当至少一边是字符串类型时做拼接类型。
注:当做拼接操作时隐式转换为字符串格式。
例程:如上Demo3.java
2、/ :表示取整操作 5/2 运行结果为 2
% :取余操作 5%2 运行结果为: 1
注:要想得到数学中的除法运算结果俩个数据至少有一个为浮点类型。
给定一个数99999秒,将其转为多少小时多少分中多少秒?
99999%
例子Demo4.java
1 public class Demo4 { 2 public static void main(String [] args) { 3 //99999秒换算成几小时几分几秒 4 int s = 99999; 5 int h = s /3600; //取整小时 6 System.out.println(h); 7 int s1 = s %3600; //取余数剩下几秒 8 int m = s1 /60; //换算成分钟 9 System.out.println(m); 10 int s2 = s1 %60; //取余数剩下几秒 11 System.out.println(s2); 12 13 System.out.println("99999秒等价于"+h+"小时"+m+"分"+s2+"秒"); 14 } 15 16 }
3、前++,后++,前--,后--
int i = 5; int j ;
前++: ++i 规则:先自身加1,再后运算。
j = ++i; i = 6 j = 6;
后++: i++ 规则:先运算,再自加1。
j = i++; i = 6, j = 5;
int i = 5; int j ;
前--: j = --i; i = 4; j = 4;
后--: j = i--; i = 4; j = 5;
例程:Demo5.java
1 public class Demo5{ 2 public static void main(String[] args) { 3 int i = 6; 4 int j = i++; // i 7 j 6 每一步 i j 的值都更新 5 System.out.println(++i +j); // 8 + 6 14 6 System.out.println(++i + j++); // 9 + 6 15 i 9 j7 7 System.out.println(i + j--); // 9 + 7 16 i9 j6 8 System.out.println(i++ + ++j); // 9 + 7 16 i10 j7 9 System.out.println(++i + --j); // 11 + 6 17 i11 j6 10 } 11 12 }
3.3 关系运算符
> < >= <= != ==
1.运算结果:布尔类型true 、false
2. ==:当等号两边是数值时可以比较等号两边数值是否相等(也是比较地址值),如果是引用类型是比较地址值是否相等。
思考:为什么是数据类型可以比较数值是否相等?
因为数值类型数据再计算机中是共享的,如果声明了一个数值型变量,并初始化了一个数据X,计算机会开辟一个新的的内存空间存储X的值,当定义了另一个同种数据类型数据x,机器在已开辟的内存空间会查找是否有x,若和X表示的是同一个数值,再计算机中不会再另开辟空间为x数值储存而是将地址值指向X的地址值。
例子:Demo6.java
1 public class Demo6{ 2 public static void main(String [] args) { 3 //关系运算符 == 4 int a = 5; 5 int b = 5; 6 System.out.println(a==b); //true 7 8 String s1 = new String("1"); 9 String s2 = new String("1"); 10 System.out.println(s1==s2); //new 开辟新的存储空间地址 false 11 System.out.println( s1.equals(s2) ); //用函数判断s1 s2在数值上是否相等 true 12 13 String s3 = "1"; 14 String s4 = "1"; 15 System.out.println(s3==s4); //判断s1 s2在数值上是否相等 false 16 17 //扩展性的赋值运算 *= += /= 18 int i = 4; 19 int j = 20; 20 System.out.println(i *= 5); // 20 21 System.out.println(i /= 5); //4 22 System.out.println(j %= 3); //2 23 } 24 }
3.4赋值运算
1、=:Java中单个等号表示将等号右边的数值赋给左边的变量。
2、扩展性的赋值运算符
+= -= *= /=
+= : i+=5 <===> i = i + 5;
*=: i*=5 <===> i = i * 5;
例子:Demo6.java
3.5 条件运算符(三目运算符)
语法:布尔表达式 ? 值1:值2;
当布尔表达式结果为true时,运算结果为值1;
当结果为false时,运算结果为值2。
值1、值2可以为任意类型数据,且可以为相等的数据类型。
练习:求两个、三个数中的最大值,及判断数的奇偶。
例子:Demo7.java
1 public class Demo7{ 2 public static void main(String [] args) { 3 System.out.println(5>3 ? "是":"否"); 4 System.out.println(3>4 ? 5:3.123); 5 System.out.println(3>4 ? 5:‘2‘); 6 getMax(); 7 checkOddEven(); 8 9 } 10 // 比较三个数值的最大值 11 public static void getMax() { 12 int i = 5; 13 int j = 8; 14 int k = 6; 15 System.out.println("i和j最大的是:"+ (i>j ? i:j ) ); 16 System.out.println("i、j、k最大的是:"+( k>(i>j ? i:j) ? k: (i>j ? i:j) ) ); 17 } 18 19 // 判断奇数偶数 20 public static void checkOddEven () { 21 int i = 5; 22 System.out.println(i+"是:"+( i%2==0 ? "偶数":"奇数")); 23 } 24 25 }
3.6 逻辑运算符:
逻辑与:&&
逻辑或:||
逻辑与和逻辑或的短路功能:逻辑与遇到false时,后面的表达式不再参与运算,结果为false;逻辑或遇到true时,后面的表达式不再参与运算结果为true。
例子: Demo8.java
1 public class Demo8{ 2 public static void main(String [] args){ 3 //逻辑与逻辑或 4 int i = 5; 5 int j = 6; 6 7 System.out.println(i++ > j && i++>j-- ); 8 System.out.println("i值:"+i + "j值:"+j); //短路i6 j6 9 System.out.println(++i > j || i++>j-- ); 10 11 System.out.println("i值:"+i + "j值:"+j); //短路i7 j6 12 getRunNian(); 13 } 14 15 public static void getRunNian() { 16 /** 17 *判断闰年条件:能够4整除,但是不能过被100整除或者能够被400整除的年份 18 */ 19 int year = 2018; 20 System.out.println( (year%4==0&&year%100!=0||year%400==0) ? "闰年":"平年" ); 21 } 22 23 }
原文地址:https://www.cnblogs.com/Kanekiyi/p/9500737.html