Java基础总结01拓展
程序员文章站
2022-04-01 10:37:48
一阶段:JavaSE学习01拓展看不懂或者不想看的可以跳往下一篇,这个只是让你知识面更宽更广1.数据类型拓展题(深入理解)/** * @author 你的大龙猫啊 * 数据类型拓展 */public class Expand01_DataType { public static void main(String[] args) { //整数拓展: 进制 二进制0b 十进制 八进制0 十六进制0x int i = 10;...
一阶段:JavaSE学习01拓展
看不懂或者不想看的可以跳往下一篇,这个只是让你知识面更宽更广
1.数据类型拓展题(深入理解)
/**
* @author 你的大龙猫啊
* 数据类型拓展
*/
public class Expand01_DataType {
public static void main(String[] args) {
//整数拓展: 进制 二进制0b 十进制 八进制0 十六进制0x
int i = 10;
int i2 = 010; //八进制0
int i3 = 0x10; //十六进制0x
System.out.println(i);
System.out.println(i2);
System.out.println(i3);
System.out.println("=======================================");
//浮点数拓展? 银行业务怎么表示? 钱 -----使用BigDecimal 数学工具类
//float 有限的 离散的 舍入误差 大约 接近但不等于
//double
//最好完全避免使用浮点数进行比较 ---重点记住
float f = 0.1f; //0.1
double d = 1.0 / 10; //0.1
System.out.println(f);
System.out.println(d);
System.out.println(f == d); //false
float d1 = 231311223f;
float d2 = d1 + 1;
System.out.println(d1);
System.out.println(d2);
System.out.println(d1 == d2); //true
System.out.println("=======================================");
//字符拓展
char c1 = 'a';
char c2 = '中';
System.out.println(c1);
System.out.println((int) c1);//强制转换 97
System.out.println(c2);
System.out.println((int) c2);//强制转换 20013
//所有的字符本质还是数字
//编码 Unicode 表:97 = a 65 = A 2字节 0 - 65536 Excel 2^16 = 65536
//Unicode编码表示范围 U0000 - UFFFFF
char c3 = '\u0061';
System.out.println(c3); //a
//转义字符
// \t 制表符 相当于3个空格
// \n 换行
System.out.println("hello\tworld");
System.out.println("hello\nworld");
System.out.println("=======================================");
String sa = new String("hello world");
String sb = new String("hello world");
System.out.println(sa == sb); //false
String sc = ("hello world");
String sd = ("hello world");
System.out.println(sc == sd); //true
//对象 从内存分析
//布尔值拓展
boolean flag = true;
if(flag==true){} //新手
if(flag){} //老手
//程序里面有这样一句话 Less is Moore! 代码精简易读
}
}
2.强制转换拓展
/**
* @author 你的大龙猫啊
* 类型转换拓展
*/
public class Expand02_Convert {
public static void main(String[] args) {
//操作比较大的数的时候,注意溢出问题
//JDK7新特性,数字之间可以用下划线分隔
int money = 10_0000_0000;
int years = 20;
System.out.println(money);
int total = money * years;
System.out.println(total);//-1474836480 计算的时候溢出了
long total2 = money * years;//默认是int,转换之前已经存在问题了
System.out.println(total2);
long total3 =money * ((long)years);
System.out.println(total3);
}
}
/**
* @author 你的大龙猫啊
* 类型转换拓展
*/
public class Expand02_Convert02 {
/*
请找出下列代码的错误, 指出原因并解决. ---先去看代码 思考过后再看注释
担心的问题:
3 和 4 是两个常量, 整数常量默认的数据类型是int
这里两个int相加, 结果还是int, int给byte赋值.
emmm... 应该需要强转吧
Java存在常量优化机制:
byte d = 3 + 4;
这里的3和4是两个常量, Java存在常量优化机制, 会在编译的时候就会让3和4进行相加, 然后会自动判断7是否在byte的取值范围内
不在范围内: 编译出错
在范围内: 通过编译
*/
public static void main(String[] args) {
byte d = 3 + 4;
System.out.println(d);
long num = 123456; //数据小的时候不会报错 自动类型提升
long num = 123456789123456789; //数据超过范围时不加L就会报错
long num = 123456789123456789L //所以给long类型的变量赋值一般加上L
}
}
3.位运算符拓展
package com.hui.expand;
/**
* @author 你的大龙猫啊
* @company www.com.hui
* 位运算拓展
*/
public class Expand03_Operator {
public static void main(String[] args) {
/*
A = 0011 1100
B = 0000 1101
------------------
A&B = 0000 1100 都为1才为1
A|B = 0011 1101 有1则为1
A^B = 0011 0001 相同则为0 不同则为1
~B = 1111 0010
2*8 = 16 如何使计算机快速得到2*8的结果 ---> 2*2*2*2
效率极高
<< 左移 相当于*2
>> 右移 相当于/2
0000 0000 0
0000 0001 1
0000 0010 2
0000 0011 3
0000 0100 4
0000 1000 8
0001 0000 16
*/
System.out.println(2<<3);
}
}
先自己理解,如果还是不懂,再琢磨琢磨
本文地址:https://blog.csdn.net/weixin_44215263/article/details/107661748