java学习记录3.6
2021-06-09 12:02
标签:string world 实例 离散 str out new 等级 数组 java学习记录3.6 标签:string world 实例 离散 str out new 等级 数组 原文地址:https://www.cnblogs.com/studyHistory/p/14493209.html一. 数据类型的拓展
public class Demo03 {
public static void main(String[] args) {
// =============================================
// 整数拓展: 进制 二进制0b 十进制 八进制0 十六进制0x
// =============================================
int i1 = 10; // 十进制的10就是10
int i2 = 010; // 八进制下10代表8
int i3 = 0x10; // 十六进制10代表16
int i4 = 0b10; // 二进制10代表2
System.out.println(i1);
System.out.println(i2);
System.out.println(i3);
System.out.println(i4);
System.out.println("============================");
// =============================================
// 浮点数拓展 银行业务怎么表示钱
// BigDecimal 数学工具类
// =============================================
// float 有限(只能表示有限位小数) 离散 舍入误差(四舍五入的误差) 大约,接近但不等于
// double
// 最好完全避免使用浮点数进行比较,避免误差
float f = 0.1f; // 0.1
double d = 1.0/10; // 0.1
System.out.println(f == d); // false 并不相等
float d1 = 2132141241251f;
float d2 = d1 + 1;
System.out.println(d1 == d2); // true
System.out.println("============================");
// =============================================
// 字符拓展
// =============================================
char c1 = ‘a‘;
char c2 = ‘中‘;
System.out.println(c1);
System.out.println((int)c1); // 强制转换类型
System.out.println(c2);
System.out.println((int)c2); // 强制转换类型
// 所有字符本质还是一个数字
// 编码表 Unicode 2个字节 范围是0 - 65536
// U0000 - UFFFF
char c3 = ‘\u0061‘;
System.out.println(c3); // a
// 转义字符
// \t 空格制表符
// \n 换行符
System.out.println("Hello\tWorld");
System.out.println("Hello\nWorld");
// =============================
String sa = new String("Hello World");
String sb = new String("Hello World");
System.out.println(sa == sb); // false 对象的内存地址不一样
}
}
二. 类型转换
2.1 类型转换规则
public class Demo04 {
public static void main(String[] args) {
/**
* 类型转换
* 1. 类型转换过程,由高到低需要强制类型转换
* 语法: (类型)变量名
* 2. 类型转换过程,由低到高会自动进行类型装换
* 注意:
* 1. 不能对布尔值进行转换(布尔值是位)
* 2. 不能把对象类型转换为不相干的类型
* 3. 把高容量转换为低容量的时候,强制转换
* 4. 强制转换的时候可能存在内存溢出,或者精度丢失的问题
*/
// 强制类型转换(高到低)
int i = 128;
byte b = (byte)i; // 内存溢出 byte类型是一个字节,最大值-128 - 127
System.out.println(b);
// 强制类型转换会精度丢失
System.out.println("=========================");
System.out.println((int)23.7); // 23
System.out.println((int)-45.12f); // 45
// 自动类型转换(低到高)
short s = 123;
int i1 = s;
System.out.println(i1);
char c = ‘a‘;
int i3 = c + 1; // 自动转换了,因为字符char比int等级低
char c1 = (char)i3; // 强制转换为字符
System.out.println(c1);
}
}
2.2 解决内存溢出的问题
public class Demo05 {
public static void main(String[] args) {
// 操作比较大得数的时候,注意溢出问题
// JDK7新特性,数字之间可以使用_进行分割
int money = 10_0000_0000;
int year = 20;
int total = money * year;
System.out.println(total); // -1474836480,内存溢出了,int4个字节不足以表示超过21亿的数组
long total2 = money * year; // 计算完毕之后才会进行赋值,所以不会还是溢出了
long total3 = money * (long)year; // 计算之前的时候就给他进行转换,解决溢出问题
System.out.println(total3);
}
}
三. 变量作用域
3.1 变量
public class Demo06 {
// 类变量: 可以在类任意位置使用
static int num = 123;
// 实例变量(属性): 初始化即可,无需赋值
// 不赋值,就会使用默认值,对象初始值的null,其他值基本都是0, 0.0
String s1;
int age;
public static void main(String[] args) {
/**
* 变量作用域
* 1. 类变量
* 就是类的static静态属性,只属于类自己的,类内部都能用
* 2. 实例变量
* 类的属性,要被new实例化后可以使用.属性名(变量名)使用
* 3. 局部变量
* 方法内部的变量,局部变量
* 必须声明和初始化值
*/
// 实例变量(属性),需要被实例化后使用
Demo06 D1 = new Demo06();
System.out.println(D1.s1);
System.out.println(D1.age);
// 类变量(类的任意位置使用)
System.out.println(num);
// 局部变量
String aaa = "是撒多撒";
}
}
3.2 常量
public class Demo07 {
// 定义常量(不能修改的值): 需要使用final关键字
static final double BBB = 0.31231;
public static void main(String[] args) {
System.out.println(BBB);
}
}