一:java变量

128 阅读3分钟

目录

  1. 变量介绍
  2. +号使用
  3. 数据类型(重点)
  4. 编码
  5. 数据类型转换

java中“+”的使用

  1. 两边都是数值类型,做加法运算
  2. 其中一方是字符串,做拼接运算

java中的数据类型

每一种数据都定义了明确的数据类型,在内存中分配了不同大小的内存空间。

基本数据类型

  1. 数值型 整数类型:byte(1), short(2), int(4), long(8) 浮点(小数)类型:float(4), double(8)

  2. 字符型:char(2),存放单个字符

  3. 布尔型:boolean(1),存放true,false

引用类型

  1. 类(class)
  2. 接口(interface)
  3. 数组 []

eg:String是引用类型

基本数据类型:一共有八种 image.png

整数类型详解

image.png

  1. java整形常量默认为int类型,声明long类型需要常量后面加“l”
int n1 = 1 // 4字节
long n2 = 1l // 8字节

浮点类型

image.png

浮点数的注意:

  1. 浮点数在计算机中存放形式:浮点数 = 符号位 + 指数位 + 尾数位
  2. 尾数部分可能丢失,造成精度损失(小数都是近似值)
  3. 浮点常量默认是double类型,声明float类型,需要在后面加f
  4. 不知精度的情况通常使用double类型
float num1 = 1.1 // 错误
float num2 = 1.1l // 正确
double num3 = 1.1 // 对
double num3 = 1.1l // 对
float num1 = 2.7
float num2 = 8.1 / 3
System.out.println(num1) // 2.7 
System.out.println(num1) // 2.69999999999近似值,不是2.7
double num3 = 1.1l // 对

注意:当我们对计算出来的结果(直接赋值的不会)是小数的值进行比较或者相等判断时候,要非常小心,应该比两个数据的差值在某个范围内。

// 错误的写法
if (num1 == num2) {
    System.out.println("相等")
}

// 正确的写法
if (Math.abs( num1 - num2) < 0.000001) {
    System.out.println("相等")
}

字符类型char

字符的本质,它的底层,对应的是一个具体的数字

字符类型细节

  1. 用单引号,不能用双引号,双引号是表示字符串类型String。
  2. 在java中,char的本质是一个整数,在输出时,是unicode码对应的字符
  3. 可以给char赋值一个整数,然后在输出的时候,会按照Unicode对应的字符输出
  4. char类型是可以运算的,因为它有对应的Unicode
char c1 = 97
System.out.println(c1) // 'a'
char c2 = 'a'
System.out.println(c2) // 'a'

// char 类型可以运算
System.out.println('a' + 10) // 107

字符类型的本质讨论

  1. 不同的编码会造成文件大小不一样
  2. ASCII:一共128个字符,每个字符1个字节
  3. utf-8:大小可变的编码,字母用一个字节,汉字用3个字节
  4. Unicode:固定编码大小,字母和汉字都是2个字节,Unicode兼容ASCII编码

布尔类型

基本数据类型转换

java程序在运算或赋值时,精度小的会自动转换成精度较大的数据类型,这个就是自动数据类型转换

下面一张图要背下

image.png

int a = 'a' // 对 char -> int
double b = 10 // 对 int -> double

自动类型转换细节

  1. 多种数据混合运算,系统会把所有数据转换成容量(精度)最大的那种数据,在进行运算
  2. 当我们把容量(精度)大的数据类型转换成精度小的数据类型时,会报错,反之不会。
  3. byte,short这两个,不能和char互相转换
  4. byte,short,char这三者可以计算,他们会把自己都先转成int类型再计算(哪怕其中只有一种数据类型
  5. boolean不参与转换
byte b1 = 10 // 对,在byte范围内就可以-128`127
int a = 10
byte c = a // 错, 因为a占了4个字节
char d = b1 // 错

byte a1 = 1
short s1 = 1
short s2 = a1 + s1 // 错 因为a1 + s1已经变成int类型了

boolean a2 = true
int a3 = a2 // 错

强制类型转换

强制转换符号只针对最近的数有效

char c1 = 1 // ok
int m = 100
char c2 = m // fail
char c3 = (char)m // ok

String和基本类型转换

  1. 基本数据类型转化为字符串,加一个""就行
  2. String转换成基本数据类型:通过基本类型包装类调用parseXX方法即可,在java里面,每一个基本数据类型都对应了一个包装类。
int n1 = Interger.parseInt("123")
double n2 Double.parseDouble("132")
boolean n3 = Boolean.parseBoolean("true")
...
  1. 怎么把字符串转换成字符char:这句话的意思是:获取这个字符串的第一个字符。因为char只能显示一个字符

java类的组织形式

image.png