z-hou

java的变量和常量

Java变量

变量的数据类型一共有八种,分两大类

 

 

基本数据类型

数值整型:int long short byte

long类型一般要在后面加一个L

float类型一般要在后面加一个f

long num = 90L;
float num1 = 21f;
类型名称 关键字 占用内存 取值范围
字节型 byte 1 字节 -128~127
短整型 short 2 字节 -32768~32767
整型 int 4 字节 -2147483648~2147483647
长整型 long 8 字节 -9223372036854775808L~9223372036854775807L

数值浮点型:

单精度浮点型 float 4 字节 +/-3.4E+38F(6~7 个有效位)
双精度浮点型 double 8 字节 +/-1.8E+308 (15 个有效位)

字符型和布尔型

字符型 char 2 字节 ISO 单一字符集
布尔型 boolean 1 字节 true 或 false
数据类型扩展

整型

进制问题 二进制0b 八进制0 十进制 十六进制0x开头

int i = 10;
int i2 = 010;
int i3 = 0x10;
System.out.println(i);
System.out.println(i2);
System.out.println(i3);
10
8
16

 

 

浮点型在计算机的储存

字符型

char c1 = \'a\';
char c2 = \'中\';
//强制转换
System.out.println(c1);
System.out.println((int)c1);
System.out.println(c1);
System.out.println((int)c2);
//所有字符本质还是数字
//编码 unicode  0-- 65536字符
将数字转换为字符
    char c3 = \'\u0061\';
System.out.println(c3);

 


a

问题?

String c1 = new String("hello");
String c2 = new String("hello");
​
String c3 = "hello";
String c4 = "hello";
​
System.out.println(c1==c2);
System.out.println(c3==c4);
​
false
true

 

 

为什么会这样?

布尔值拓展

boolean flag = true;
if(flag==true){}//新手写法
if(flag){}//老手写法
类型转换

类型转换分为强制类型转换和自动类型转换

自动类型转换:小范围数据赋值给大范围数据系统自动转换

编译过程不会造成数据丢失

 

 

强制类型转换:大范围数据赋值给小范围数据必须强制转换

编译过程可能会造成数据丢失

 

 

int i=128;
short b = i;
System.out.println(b);
Error:(6, 19) java: 不兼容的类型: 从int转换到short可能会有损失
int i=128;
short b = (short)i;
System.out.println(b);
128int b = 298;
byte a = (byte)b;
System.out.println(a);
​
a=42

 

b为int类型占据4个字节 a为byte类型占据一个字节

在强制转换过程中 b的精度丢失 前面三个高位字节数据丢失

int 00000000 00000000 00000001 00101010

byte 00101010

 

表达式类型自动提升

表达式:变量和运算符组成的一个算式

变量在表达式运算中也可能发生数据类型的自动提升

如b,a,c三个数据在运算中自动提升为int 类型

char b = 2;
byte a = 3;
short c=5;
byte b1=a+b+c;
System.out.println("b1="+b1);
​
Error:(9, 20) java: 不兼容的类型: 从int转换到byte可能会有损失
char b = 2;
        byte a = 3;
        short c=5;
        byte b1=(byte) (a+b+c);
        System.out.println("b1="+b1);
 b1=10

 

变量的作用域

什么是变量的作用域?

一个变量被定义时他不一定能够使用,这个变量只有在这个变量的作用范围内才能够被使用

这个就是变量的作用域。

 

变量同时也分为三种 类变量 实例变量 局部变量

类变量 :是写在类里面的 它与实例变量唯一不同的是类变量前面需要加一个static修饰

实例变量:与类变量相同,只是不用加static 实例变量系统自带默认值

局部变量:是写在方法里面的 局部变量必须声明和初始法

 

public class HelloWorld {
    static int n = 2;//类变量
    String name;//实例变量 从属于对象
    public static void main(String[] args) {
        int i=0;//局部变量 局部变量必须声明和初始法
        
    }
}

 

实例变量更深讲解

实例变量:与类变量相同,只是不用加static 实例变量系统自带默认值

public class HelloWorld {
   int age;
   String name;//实例变量 如果不初始法会变成默认值
    /*
    布尔值默认值是false
    除了基本类型默认值都是null
     */
    public static void main(String[] args) {
        int i =10;//局部变量  使用必须声明和初始法
        /*
        如果我们想要使用实例变量,因为它是从属于对象,直接用是用不了的
        这时我们需要new 一个对象,看不懂没关系,学到后面对象的时候再回来看看
        就明白了
         */
        //变量类型(类类型也是引用类型的一种) 变量名=new HelloWorld();
        HelloWorld helloWorld = new HelloWorld();//在这里我new 了一个对象 我需要对象来使用实例变量
​
        System.out.println(helloWorld.age);//来输出一下看看
        System.out.println(helloWorld.name);
​
    }
}

 


 

 

类变量:

public class HelloWorld {
    //类变量 从属于类 与类一起诞生 不懂继续学
   static int age=100;
    public static void main(String[] args) {
        System.out.println(age);//这里为什么可以直接输出?

 


   
常量

与变量相对应的就是常量,常量就是固定不变的值

整型常量

二进制0b开头

八进以0开头

十六进制以0x开头

 

 

final 常量名=值; 常量名一般使用大写
final double PI=3.14;
​
static final double PI=3.14;
final static double PI=3.14;
两种写法都可以,因为它们都是修饰符(final,static)不区分先后顺序

 

2021-03-09 17:17:12

分类:

技术点:

相关文章: