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); 128 int 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)不区分先后顺序