Java【变量,数据类型(转换),运算符】

JAVA的变量

1、java变量的概念:

变量表示内存中的一个存储区域,该区域用来存放同一类型的常量数据,并可以重复使用这个区域,

这个区域有自己的名称(变量名)和类型(数据类型)。

可以理解,变量就相当于数学中的未知数。(运行中会被改变的值。)

2、定义变量的格式

数据类型 变量名 = 初始化值;( = 是赋值符号)
格式是固定的,记住它,以不变应万变。

int res = (12*24);//开辟一片名叫 res区域,存放int类型的数据。将12*24的值赋值给res区域,作为初始值。
int res1;//开辟一片名叫 res区域,存放int类型的数据。但是如果一个变量 没有赋值,是无法直接使用的。

3、变量命名

变量表示内存中的一个存储区域,这时必须给这个区域起个名字 ,才能使用。当在给变量起名时,同样需要见名知义。同标识符。

例如:String name ;使用name表示这个空间名字,即说明这个空间存放的姓名。

4、变量注意事项

变量在使用时,必须先给变量空间存放数据,即初始化。同时变量也有自己的生命周期(作用域问题)。
注意:常量池的值有的直接用,没有就创建,注意常量池基础数据很多,开发时不考虑他的多少,优化内存问题。

java数据类型

在生活中,使用的数据有大有小,有整数,也有小数,同时也会使用字母,或者汉字表示特定含义。在Java中根据数据的不同特点,数据也分为不同的类型。
java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存总分配了不同大小的内存空间。
Java【变量,数据类型(转换),运算符】_第1张图片

1、布尔类型 boolean

boolean类型通常用于逻辑运算程序流程控制
boolean 类型数据只允许取值truefalse

boolean flag;
flag = true;
System.out.println("flag"+ flag);

2、char类型

char用来存储通常意义上的字符,char占两个字节;范围是[0,65535],前256 (2^16)个表示 特殊字符,通常用单引号包裹’’。

例如:

char c = 'A'; 
char c2 = '传'; 
char c3=97; 

3、转义字符

有些符号在java语言中有独特意义,当需要使用原本意义的时候需要,转义表示。
例如:键盘上的制表符tab键。可以使用 ‘\t’表示。如双引号,在Java中使用双引号表示字符串,若想使用双引号本身含义,即可使用’\”’表示。

4、String类型

String不属于基本数据类型;但和字符有一定的联系。
String是一个(java语言里的最小单元),表示字符串;就是一串字符,字符串用""包裹起来,连接字符用+。

String str1 = "这是一个字符串"+"这又是一个字符串";

5、整数类型

整型数据根据数据范围不同,需要使用不同的关键字来表示。

6、浮点类型(float、double)

doublefloat关键字在内存中开辟的空间可以存放小数。double开辟8个字节的空间,float开辟4个字节的空间;
Java浮点类型常量有两种表示方式:

  • 十进制形式: 例如:3.14 ,168.0, .618
  • 科学计数法形式: 例如:3.14e2, 3.14E2, 1000E-2
    Java浮点型常量默认是double,则要声明一个常量为float型,则需在常量后加上f 或 F,
    如:
double pi = 3.14;//正确 
float pi = 3.14F;//必须加上f

java数据存储区域简述

1. 寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.
2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(对象可能在常量池里)(字符串常量对象存放在常量池中。)
3. 堆:存放所有new出来的对象。
4. 静态域:存放静态成员(static定义的)
5. 常量池:存放字符串常量和基本类型常量(public static final)
6. 非RAM存储:硬盘等永久存储空间

栈,堆和常量池,对于栈和常量池中的对象可以共享,对于堆中的对象不可以共享。栈中的数据大小和生命周期是可以确定的,当没有引用指向数据时,这个数据就会消失。堆中的对象的由垃圾回收器负责回收,因此大小和生命周期不需要确定,具有很大的灵活性。

对于字符串:其对象的引用都是存储在栈中的,如果是编译期已经创建好(直接用双引号定义的)的就存储在常量池中,如果是运行期(new出来的)才能确定的就存储在堆中。对于equals相等的字符串,在常量池中永远只有一份,在堆中有多份。

垃圾回收站(GC):会检查托管堆中是否有应用程序不再使用的任何对象。如果有,他们的内存就可以回收。

1.垃圾回收器开始执行时,垃圾回收器沿着线程栈上行以检查所有根(然后遍历所有类型对象上的所有根),如果发现一个根引用了一个对象,就在对象的“同步块索引字段”上开启一个位(对象就是这样标记的),如果对象里又引用有其他对象,则会遍历所有对象以标识。检查好所有根之后,堆中将包含一组已标记和未标记的对象。

2.垃圾回收器线性遍历堆,以寻找未标记对象的连续内存。如果发现的内存块比较小,垃圾回收器会忽略它们。但是,如果发现大的、可用的连续内存块,“垃圾回收器会把非垃圾的对象移动到这里以压缩堆”。
最后记得重新分配地址存根

数据类型转换

1、隐式类型转换

当在存储整数数据时,Java中所有的 整数默认 都是int类型的。所以在将-128~127之间的数据存储在byte类型空间中时,JVM会把这个int类型的数据自动转换成byte类型,然后存放在byte空间中。short同理。

// 类型转化
byte b = 2;// 隐式转化 int类型的2转化为byte类型 放在b中
short s = 34;// 同上
char ch1 = 65;// 隐式转化 int类型的65转化为char类型 放在ch1中
char ch2 = 'A';//直接将A字符存放在ch2空间中
// 当数据超过需要隐式转化的类型时,会发生错误。
// char ch = 65536;
// byte b2 = 128;
// short s2 = 65536;

基本数据类型转化的范围:byte,short,char–int–long–float–double
整型,字符型,浮点型的数据在混合运算中相互转换,转换时遵循以下原则:
容量小的类型可自动转换为容量大的数据类型(类型自动提升):
byte,short,char → int → long → float → double

byte,short,char之间不会相互转换,他们在计算时首先会转换为int类型。

2、强制类型转换

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

强制转换格式:(数据类型)(被转数据);

long l = 123L;
int i = (int) l;
double d = 3.14;
float f = (float) d;

算术运算符

Java中的算术运算符和生活中的算数运算基本相似。
在使用算术运算时需要注意运算两侧类型:当两侧类型不统一时,运算结果和较大类型保持一致。

自加自减:

注意:
当自加符号在变量右侧时,需要先将变量的值临时保存,然后给变量空间加1,接着用临时变量空间中的值去和其他运算符进行运算。(需要开辟新的空间)
当自加符号在变量左侧时,需要先给变量空间加1,然后把加1后的值和其他运算符进行运算。(不需要开辟新的空间)

赋值运算符

赋值运算符号:

*= , +=, -=, =, /=, %=

赋值号的功能是将赋值号右侧的结果存储到左侧的变量空间中。

赋值号和算术运算符组合起来的混合运算符,它们即具有算术运算的特定,同时还具有赋值运算的特定。

int a = 4;
a += 3; //相当于 a = a + 3;的运算,即把a空间中的值和3进行加法运算,把和值从新存放到a空间中

比较运算符

比较运算符符号:

>大于 >=大于等于 <小于 <=小于等于 ==相等 !=不等

比较运算符。运算完的结果要么true,要么false。后期学习中会根据比较的结果做出相应逻辑判断。

逻辑运算符

逻辑运算符。用来连接boolean型表达式的。

& : 与
| :或
^ : 异或。
!:非

&& 短路与 || 短路或

位运算符

应用:

需求1:最有效率运算2乘以8.通过位移运算。2<<3

需求2,对两个整数变量的值进行互换(不需要第三方变量)
三元置换方法:

//通过第三方变量的形式进行置换。
int a = 3, b = 7;
int temp = a;
a = b;
b = temp;

//通过和的形式。有个弊端,两个数据较大,可能会超出int范围。
a = a + b;//a = 3 + 7;
b = a - b;//b = 3 + 7 - 7; b = 3;
a = a - b;//a = 3 + 7 - 3;  a = 7;

//技巧。异或。
a = a ^ b;// a = 3 ^ 7;
b = a ^ b;// b = 3 ^ 7 ^ 7;
a = a ^ b;// a = 3 ^ 7 ^ 3;

你可能感兴趣的:(Java学习基础)