2. Java变量

1. 变量综述

1.1 变量原理

class Test{
	public static void main(String []args){
		int a = 1;
		int b = 3;//①
		b = 89;//②
		System.out.println(a);
		System.out.println(b);
	}
}

①处a指向1,b指向3
②处b指向的位置,数据被换掉,b指向89

1.2 变量声明、赋值和使用

可以声明和赋值分开,也可以声明后紧接着赋值。

public class Var01
	public static void main(String[]args){
	
		int a;
		a=100;
		System.out.println(a);
		
		int b = 800;
		System.out.println(b);
	}
}

1.3 存储不同的数据类型

public class Var02
	public static void main(String[]args){
	
		int age = 30;
		double score = 88.9;
		char gender = '男';
		String name = "king";
		System.out.println("人的信息如下:");
		System.out.println(name);
		System.out.println(age);
		System.out.println(score);
		System.out.println(gender);
	}
}

1.4 变量使用注意事项

  • 变量表示内存中的一个存储区域 。变量类型不同,所占空间不同,比如: int 4个字节,double 8个字节。
  • 变量必须先声明,后使用。
  • 某一变量值可以在同一类型范围内不断变化。
  • 在同一作用域内,变量不能重名。
  • 变量三要素:变量名、值、数据类型。

2. 加号的使用

  • 左右两边都是数值,做加法运算
  • 左右两边有一方为字符串,做拼接运算
System.out.println(100 + 98);//198
System.out.println("100" + 98);//10098
System.out.println(100 + 3 + "hello");//103hello
System.out.printIn("hello" + 100 + 3);//hello1003

3. 数据类型

3.1 综述

  Java数据类型分为两大类:基本数据类型、引用类型。
  基本数据类型有8种,包括数值型【byte,short,int,long,float,double】,char,boolean;引用类型有3种,类,接口,数组。
  Java中没有单独的String类型,String在引用数据类型的类当中讲解。
  下图中放括号内标注的是各个数据类型所占的字节数。

3.2 整型

类型占用存储空间范围
byte1字节-128~127
short2字节-215 ~ 215-1 (-32768~32767)
int4字节-231 ~ 231-1 (-2147483648 ~ 2147483647)
long8字节-263 ~ 263-1 (-9223372036854775808 ~ 9223372036854775807)
  • Java整型有固定的范围和字段长度,与操作系统无关,以保证Java的可移植性。
  • Java整型数值默认为int型,long型数值后须加‘l’或‘L’。int a = 1L是不允许的,
  • Java变量一般声明为int型, 除非不足以表示大数,才使用long。

3.3 浮点型

类型占用存储空间范围
float4字节-3.403E38~3.403E38
double8字节-1.798E308~1.798E308
  • 浮点数在机器中的存放形式:浮点数 = 符位 + 指数位 + 尾数位。

  • 尾数部分可能丢失,造成精度损失,所以小数都是近似值。

  • 与整型类似,Java 浮点型也有固定的范围和字段长度,与操作系统无关。

  • Java的浮点型数值默认为double型,float型数值后须加’f’或’F’。

    float num2 = 1.1F;		//正确
    double num3 = 1.1;		//正确
    double num4 = 1.1F;		//正确
    
  • 通常应使用double,因为它比float更精确。

    double num9 = 2.1234567851;
    float num10   = 2.1234567851F;
    System.out.println(num9); //输出2.1234567851 
    System.out.println(num10);//输出2.1234567
    
  • 浮点数使用陷阱:2.7 与 8.1/3

    double num11 = 2.7;
    double num12 = 8.1/3;
    System.out.println(num11); //输出2.7
    System.out.println(num12); //输出2.666666666666667
    

      num12是一个接近2.7的值。若出现num11和num12这种情形,即:从数学角度来说,两个值相等,但计算机得到的却不相等,就不能直接用if(num11 == num12)这种方式判断是否相等,可以用if(Math.abs(num11 - num12) < 0.0000001)这种方式判断(0.0000001是可以接受的误差)。
      若num2直接赋值为2.7,num11与num12就是完全相等的,如下面代码所示:

    double num11 = 2.7;
    double num12 = 2.7;
    System.out.println(num11); //输出2.7 
    System.out.println(num12); //输出2.7
    

3.4 字符型

3.4.1 字符型的使用

  • 字符类型是char,字符常用单引号括起来。

  • Java字符占2个字节,可以存放单个字符,也可以存放汉字。char c = '韩';

  • 多个字符用String存放,后面会详细讲解String。

  • 字符在底层对应的是数字,所以char类型也可以存放一个数字,但是在输出这个char类型的数据时,会输出数字对应的字符(Unicode码对应的字符)。Unicode码与字符在线转换:https://tool.chinaz.com/tools/unicode.aspx

    char c = 97;
    System.out.println(c);//输出a
    
  • 要输出对应的数字,可以使用“(int)字符”的方式。

    char c2 = 'a'; 
    System.out.println((int)c2); 	//97
    char c3 = '韩' ;
    System.out.println( (int)c3);	//38889
    
  • char型可以参与运算,因为相当于一个整数。

    System.out.println('a' + 10); 	//97 + 10 = 107
    //b'先转换成数值98,再参与运算得99,赋值给c5时又自动转换为char型
    char c5 = 'b'+ 1;		//c5 = 'c'
    System.out.println((int)c5); 	//99
    System.out.println(c5); 		//'c'
    

3.4.2 字符型的本质

字符型在计算机中的存储和读取,比如’a’ :
存储:‘a’ → 码值97 → 二进制(110 0001) → 存储
读取:二进制(110 0001) → 97→ 'a’→ 显示

字符编码

编码类型描述
ASCII 编码✦英文字符与二进制之间的关系。
✦用1个字节表示,共128个字符(实际上可以表示256个字符,只用了128个,最前面一位统一为0)。
✦缺点:不能表示所有字符。
Unicede 编码✦万国码,可以表示世界上所有字符,各种文字使用统一的编码,所以不会出现乱码。
字母和汉字都占2个字节
✦最多编码 216 = 65536个字符.
✦编码0~127的字符时与ASCII码一样。比如’a’的ASCII码是0x61 ,Unicode码是0x0061,都对应97。因此Unicode码兼容ASCII码。.
✦缺点:浪费存储空间(字母也占2字节)。
utf-8 编码使用1~6个字节表示一个符号。
字母占1个字节,汉字占3个字节
gbk 编码字母占1个字节,汉字占2个字节(可表示的汉字数量比utf-8少,但也基本够用;也因为可表示汉字数量的原因,有时将utf-8的文件转换成gbk会报错)。
gb2312 编码可以表示的汉字比较少(gb2312 < gbk),开发中很少用。
big5 编码繁体中文,台湾,香港

3.5 布尔型

  • 布尔类型(boolean),取值为true和false,无null。
  • boolean类型占1个字节。
  • boolean类型适于逻辑运算,一般用于程序流程控制。
  • 不可以0或非0的整数替代false和true,这点和C语言不同。
  • 布尔类型赋值时,返回值与所赋值一致。
    boolean b;
    System.out.println(b = false);//false
    System.out.println(b);//false
    

4. 数据类型转换

4.1 自动类型转换

自动类型转换:当Java程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数据类型。
数据类型按精度(容量)大小排序为
在这里插入图片描述

int a = 'c';	//char型自动转换为int型
double d = 80;	//int型并自动转换为double型(==中间可以跨级转换==)
System.out.println(a);	//输出99
System.out.println(d);	//输出80.0
  • 不同类型的两个数据运算时,首先自动将容量较小的数据转换成容量较大的数据类型,再计算。

    //摄氏温度 = 5 / 9 * (华氏温度 - 100)
    double huaShi = 1234.6;
    double sheShi = 5.0 / 9 * (huaShi - 100);//注意5.0的作用
    System.out.println("华氏温度" + huaShi + 对应的摄氏温度=" + sheShi); 
    
  • 把容量(精度)大的数据类型赋值给容量(精度)小的数据类型时,就会报错,反之就会自动类型转换。

    int n1 = 10; 
    float d1 = n1 + 1.1;//错误
    //原因:n1是int型,1.1是double型
    //操作数中容量最大的是double型,所以操作数统一转成double型,运算结果也是double型
    //double型的数据赋值给d1(float型),是容量大的类型赋值给容量小的类型,会报错
    double d2 = n1 + 1.1;//正确
    float d3 = n1 + 1.1F;//正确
    
    int n2 = 1.1;//错误,1.1是double,不能自动转换成int
    
  • 把具体数值赋给 char、byte、short 时,先判断该数值是否在其范围内,如果是,就可以赋值;char、byte不能接受数值变量赋值,short可接受byte数值变量赋值(原理在上一条)。

  • byte与char, short与char之间不会相互自动转换。

    byte b1 = 10; //正确 , byte范围是 -128~127
    int n2 = 1; 
    byte b2 = n2;
    
    char c1 = b1; //错误, 原因: byte 不能自动转成 char
    
  • byte, short, char在计算时首先转换为int类型。

    byte b2 = 1;
    byte b3 = 2;
    short s1 = 1;
    short s2 = b2 + s1;	//错误, b2 + s1 => int
    int s2 = b2 + s1;	//正确, b2 + s1 => int
    byte b4 = b2 + b3;	//错误,b2 + b3 => int
    
  • boolean不参与转换(上面的容量大小排序示意图中没有boolean)。

4.2 强制类型转换

强制类型转换:自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符( ),但可能造成精度降低或溢出,要格外注意。

int n1 = (int)1.9;
System.out.println(n1);	//输出1
int n2 = 2000;
byte b1 = (byte)n2;
System.out.println(n2);	//造成数据溢出,输出-48
//原理看二进制原反补、负数在计算机中的存放

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

  • 基本数据类型转String:基本数据类型的值+ “”。

    int n1 = 100;
    float f1 = 1.1F;
    double d1 = 4.5;
    char c1 = '男';
    boolean b1 = true;
    String s1 = n1 + "";
    String s2 = f1 + "";
    String s3 = d1 + "";
    String s4 = c1 + "";
    String s5 = b1 + "";
    
  • String转基本数据类型:使用基本数据类型对应的包装类的相应方法,得到基本数据类型。

    int num1 = Integer.parseInt(s5);
    double num2 = Double.parseDouble(s5);
    float num3 = FLoat.parseFloat(s5);
    long num4 = Long.parseLong(s5);
    byte num5 = Byte.parseByte(s5);
    boolean b = Boolean.parseBoolean("true" );
    short num6 = Short.parseShort(s5);
    

    在将String类型转成基本数据类型时,要确保String类型能够转成有效的数据,比如可以把"123" ,转成一个整数,但是不能把"hello"转成一 个整数。
    如果格式不正确,就会抛出异常,程序就会终止。(编译不报错,执行报错)

  • 不能直接把字符串转成字符,可以用charAt方法得到字符串中的某个字符。字符转String见”基本数据类型转String“。

    System.out.println(s5.charAt(0));
    

练习:
int num1 = (int)“18”; //错误 String ➡ 基本数据类型,应Integer.parselnt(“18”) ;
int num2 = 18.0; //错误 double ➡ int
double num3 = 3d; //正确
double num4 = 8; //正确 int ➡ double
int i = 48; char ch = i + 1; //错误int ➡ char
byte b= 19; shorts = b + 2; //错误int ➡ short

5. Java API文档

  API (Application Programming Interface),即应用程序编程接口,是Java提供的类还有相关的方法。中文在线文档:https://www.matools.com/api/java8
  Java类的组织形式:请添加图片描述
  查看某个类中的某个方法的使用:
  (1)按照“包->类->方法”的顺序在文档中查找。
  (2)直接在搜索框中搜索方法名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值