Java 中的变量定义以及基本的使用

1变量的定义

/**
 *  java变量的定义  通常使用 数据类型  +   变量名称 (变量名称的命名规范已经在上篇文章举过例子)        
 *举例如下:
 */

  int stuNum;

//如要赋值,需要在变量名称后面加等号     如若赋值,则称变量的初始化


int stuNum = 1234;

2使用变量的基础练习

例: 定义两个整数型变量a,b,且给他们赋值,然后交换两者的值。

法一 :使用第三方变量实现值的交换

//首先定义并初始化两个变量 ,这里使用了一个技巧,如果两个变量的数据类型相同,则可以连写。

int a = 4,b = 8;

int temp ; //定义一个第三方变量temp


temp = a;   //把a 的堆内存地址 先给temp变量


a = b;  //将b的堆内存 地址 给a

b = temp ; //将temp 对应的堆内存地址给b

这边引入一个概念  :  堆内存和栈内存  

Java把内存分成两种,一种叫做栈内存,一种叫做堆内存

在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用。

堆内存用于存放由new创建的对象和数组。在堆中分配的内存,由java虚拟机自动垃圾回收器来管理。在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于数组或者对象在堆内存中的首地址,在栈中的这个特殊的变量就变成了数组或者对象的引用变量,以后就可以在程序中使用栈内存中的引用变量来访问堆中的数组或者对象,引用变量相当于为数组或者对象起的一个别名,或者代号。

引用变量是普通变量,定义时在栈中分配内存,引用变量在程序运行到作用域外释放。而数组&对象本身在堆中分配,即使程序运行到使用new产生数组和对象的语句所在地代码块之外,数组和对象本身占用的堆内存也不会被释放,数组和对象在没有引用变量指向它的时候,才变成垃圾,不能再被使用,但是仍然占着内存,在随后的一个不确定的时间被垃圾回收器释放掉。这个也是java比较占内存的主要原因,实际上,栈中的变量指向堆内存中的变量,这就是 Java 中的指针!
————————————————
转自:https://blog.csdn.net/wangbo1998/article/details/80379016

简而言之  栈内存就是系统在里面生成一个变量 ,若初始化,堆内存里面会开辟一个空间存放栈内存里面变量对应的值 ,这个变量指向堆内存中的地址,这个地址对应的值即为变量的值。

法二:使用加减法计算实现交换

int a = 4 ;
int b = 3;

a = a + b;  

b = a - b;   //此时 b 的值已经变成了 a 所对应的值

a = a - b;   // a + b - a  = b  a的值变成b的值  值的交换完成

法三 : 使用位运算实现

int a = 4,b = 3;
// ^ 为异或符号   ,指的是将值转换为二进制后对其进行运算,如果对应的值相同即为0 ,不同为1


// 如  0001 1101 ^ 0010 0110

//0001 1101   |
//0010 0110   |
//0011 1011   |运算后变成


a = a ^ b;  // 此时a 的值变为 a ^ b
b = a ^ b;  // b = (a ^ b) ^ b -------->a ^ (b ^ b) ------>a ^ 0 = a  (a转换成二进制,为0的            
            //位置上还是0,为1的地方和0运算还是为1 所以值不变) 此时 b 的值转换为 a

a =  a ^ b  // 此时运算之前 a 是等于 a ^ b 的,此时再^ b 同上运算完成之后 a 的值变成了刚开始的b


你可能感兴趣的:(java,开发语言)