Java变量

Posted Al_tair

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java变量相关的知识,希望对你有一定的参考价值。

Java变量

大家好呀!我是小笙!前几天被培训班的老师考察基础,发现漏洞还是有很多的,我想进一步学习java基础,所以我跟着韩老师学Java,以下是我的笔记

变量 = 变量名 + 值 + 数据类型

数据类型(重点)

java是一种强制类型语言,每一种数据都定义了明确的数据类型,在内存中分配了不同大小的内存空间(字节)

细节:字符串本质是类,属于引用数据类型

整数的类型

类型占用存储空间范围
byte 字节1字节-128 ~ 127
short 短整型2字节-2^15 ~ 2^15-1
int 整型4字节-2^31 ~ 2^31-1
long 长整型8字节-2^63 ~ 2^63-1

1字节(byte) = 8 位(bit)

bit 计算机中的最小的存储单位 byte 计算机中基本存储单位

浮点类型

浮点数字 = 符号位 + 指数位 + 尾数位 (尾数位可能丢失,造成精度的损失)

E38 指的是 10^38

类型占用存储空间范围
float (单精度)4字节-3.403E38 ~ 3.403E38-1
double (双精度)8字节-1.798E308 ~ 1.798E308-1

浮点数使用细节

  1. float 后面需要添加f 或 F

    float num1 = 1.0; // 错误、
    double num2 = 1.1; // 正确
    float num3 = 1.2F; // 正确
    double num4 = 1.3f; // 正确
    
  2. 浮点型常量的表示形式

    double num = 1.0; // 十进制数形式 1.0f  .512 == 0.512(小数点必须在可以省略0)
    double num5 = 5.12e2; // 科学计数法 5.12e2 == 512  5.12E-2 == 0.0512
    
  3. 通常情况下我们使用double 精度高

    double num = 1.23456789123f;
    float num1 = 1.23456789123f;
    System.out.println(num);  // 1.23456789123
    System.out.println(num1);  // 1.2345679
    
  4. 比较 小数数字是否相等时要注意:最好不要直接去比较两个浮点数是否 == 最好是两个浮点数的差值绝对值在某个精度范围内来进行比较(如0.000001)

    double num = 8.1 / 3;
    double num1 = 2.7;
    System.out.println(num); // 2.6999999999999997 
    System.out.println(num1); //2.7
    
    if(Math.abs(num - num1) < 0.000001)
        System.out.println("相等");
    
    

字符类型

类型占用存储空间表示
char2字节表示单个字符

使用细节

  1. 字符常量是用单引号(’‘)括起来的单个字符

    char c = 'n';
    
  2. 单引号里面可以放入转义字符(虽然有两个字符,但是它是表示一个字符的 比如 // 表示 / )

    char ch = '//'
    
  3. char 的本质就是一个整数(unicode表) (**注意:字符 --> 数字 unicode 数字 --> 字符 **)

    // unicode 编码
    'a' --  97
    // char 类型字符可以进行加减 但是注意超出范围的问题
    'a' + 10 -- 107
    

字符在计算机里的存储方式

存储:‘a’ ==> 97 ==> 二进制数(11000001) ==> 存储

读取: 二进制(11000001) ==> 97 ==> ‘a’ ==> 读取

字符编码表

补充:ASCII实际上可以表示256个字符,但是只使用了128个

布尔类型

常用于条件判断语句 if - else while

类型占用存储空间表示
boolean1字节true / false

数据类型转换

自动类型转换

精度小的数据类型自动转换为精度大的数据类型

自动类型转换相关的注意细节

  1. 当一个二元运算符连接两个值时,先将两个操作数转换成同一类型的数据进行计算(转换成操作数两边范围最大的数据类型)

    // 伪代码
    if(两个操作数中有一个是double类型数据)
        另一个操作数也会强制转换成double类型数据
    else if(两个操作数中有一个是float类型数据)
        另一个操作数也会强制转换成float类型数据
    ... // 依次下去
    
  2. (byte,short)和 char 之间不会自动转换

    // 注意区分具体值赋值和变量赋值
    // 具体值赋值会先进行范围的判进行赋值
    char c = 10000; 
    short s = 'a';
    byte b = 'b';
    // 变量赋值就是依据自动类型转换或者强制类型转换
    c = (char)s;
    s = (short)c;
    
  3. 注意赋值区别(具体数值赋值和变量赋值)

    // 整数之间的赋值
    byte n = 10; // 具体数值赋值,先进行判断该数值是否在byte范围,如果在编译就不会出错,便会赋值
    int n1 = 10;
    n = n1; // int类型变量无法直接赋值给byte类型(可以进行强制类型转换)
    
    // 小数之间赋值 
    float f = 10.0; // 错误,float中将无法进行比较,本来都是一个估算值,无法进行比较范围,因此10.0是double类型无法自动转型为float
    
  4. byte,char,short 三者进行计算,在计算时首先转换成int类型数据(变量计算都会转换成int类型,不管是否是同类型数据相加减)

  5. boolean 数据类型不参与类型转换

强制类型转换

概念:自动类型转换的逆过程,将范围大的数据类型转换成范围小的数据类型,使用时需要在变量或者具体值前面加()

好处:根据程序员的意愿进行修改
坏处:范围超出了想要转换的数据类型,会导致溢出问题

// 例如 double ==> float
float f = (float)10.0;

强制类型转换的注意细节

  1. 强制符号只针对最近的操作数有效,往往会使用小括号来提升优先级

    int n = (int)10*3.5+12*2.3; // 错误
    int n = (int)(10*3.5+12*2.3); // 正确
    

基本数据类型和String类型的转换

  1. 将基本数据类型+"" ==> String类型

    String s = 10 + "";
    
  2. 通过基本数据类型的包装类调用parseXX方法

    String s = "2"
    Integer.parseInt(s);
    Double.parseDouble(s);
    Float.parseFloat(s);
    Short.parseShort(s);
    Long.parseLong(s);
    Boolean.parseBoolean("true");
    Byte.parseByte(s);
    
    // char 根据索引来判断
    String str = "123456789";
    char c  = str.charAt(0);
    

相关面试题

字符型常量和字符串常量的区别? (来自javaGuide)

  • 形式上: 字符常量是单引号引起的一个字符; 字符串常量是双引号引起的若干个字符

  • 含义上: 字符常量相当于一个整型值( ASCII 值),可以参加表达式运算; 字符串常量代表一个地址值(该字符串在内存中存放位置)

  • 占内存大小 字符常量只占2个字节; 字符串常量占若干个字节(至少一个字符结束标志) (注意: char在Java中占两个字节)

String 是最基本的数据类型吗?

答:不是,String是一个类属于引用数据类型

float 型float f=3.4是否正确?

答:否,3.4 默认为double类型,如果要赋值给float 需要强制类型转换 或者后面添加f/F

short s1 = 1; s1 = s1 + 1;有什么错?

s1+1运算结果是int 型,需要强制转换类型 或者改变书写方式

三种形式都可以如下

short s1 = 1; 
s1 += 1;
s1++;
s1 = (short)(s1+1);

以上是关于Java变量的主要内容,如果未能解决你的问题,请参考以下文章

java成员变量是啥

java全局变量清空?

java 怎么设置环境变量 急!!!

java声明变量

java如何动态定义变量

JAVA怎么配环境变量