JAVA--变量,数据类型,运算符

下面说一个程序中随处可见的东西:变量

1.变量:

变量是JVM在内存中开辟的一个空间.用来存储数据.

变量拥有一套自己的命名规则:

1.只能由字母,数字,下划线,$构成,需要注意数字不能开头.

2.命名当然可以使用汉字,但是不建议使用.

3.严格区分大小写.

4.驼峰命名法,即变量名第一个单词首字母小写,其后的单词首字母都要大写.

5.做到见名知意,否则一段时间后就会忘了这个变量的作用.

6.不能使用关键字做变量名(public等.)

也拥有使用规则

1.由于JAVA是强类型语言,,所以定义变量时必须先声明和初始化:

int num=1;

2.可以多次进行操作.

int num=1;
num=num+1;

3.作用域:从被定义开始,到所在大括号结束,超出作用域则需要重新定义.

for(int i=0;i<5;i++){
        /*
       这个大括号内就是变量i的作用域,超出范围则需要重新定义.          
        */
}
i+1;//此处已经超出作用域,若要使用需要重新定义.

上面的内容及代码中多次提到了一个"int",这个"int"就是数据类型了.

2.数据类型

数据类型分两种:基本数据类型引用数据类型,上面的int就属于基本数据类型中的一种.

基本数据类型分八种,八种里面又可以细分为四类.

1.整数型:byte,short,int,long.

2.浮点型:float,double.

3.字符型:char.

4.布尔型:boolean.

下面分别做一个介绍.

整数型

顾名思义,都是用来定义整数的类型,共有四种,对应的二进制第一位表示正负(0为正1为负)

byte:字节型,不是很常用,在内存中占8位内存空间,范围-2^7到2^7-1(-128到127).

short:短整型,不是很常用,在内存中占16位内存空间,范围-2^15到2^15(-32768到32767).

int:整型,很常用,在内存中占32位内存空间.范围-2^31到2^31-1(-2147483648~2147483647).

long:长整型,很常用,在内存中占64位内存空间.范围-2^63到2^63-1(-9223372036854775808~9223372036854775807).

关于封闭式运算:

此时利用int最大值2147483647与最小值-2147483648作如下运算:

int value1=2147483647+1;//int的最大值

int value2=-2147483648-1;//int的最小值

long value3=9223372036854775807+1;//long的最大值

long value4=-9223372036854775808-1;//long的最小值

System.out.println("value1="+value1);

System.out.println("value2="+value2);

System.out.println("value3="+value3);

System.out.println("value4="+value4);

运行之后可以发现输出结果为:

value1=-2147483648

value2=2147483647

value3=-9223372036854775808

value4=9223372036854775807

这个现象可以利用二进制运算来解释:

这里用一个式子展示一下原理.

 01111111 11111111 11111111 11111111   →2147483647的二进制

+00000000 00000000 00000000 00000001   →1

----------------------------------------------------

10000000 00000000 00000000 00000000   →-2147483648的二进制.

由于第一位二进制要表示正负(0为正1为负),所以实际表示数字的只是后面31位,而加一之后第一位变成1,整体变为负数,就变成了int的最小值.

 

浮点型

顾名思义就是表示小数的,范围比整型大了很多很多.

float:单精度浮点型,常用,在内存中占32位空间,范围-3.403E38~3.403E38.

double:双精度浮点型,常用,在内存中占64位空间,范围-1.79E308~1.79E308.

 

关于浮点数的精度

此时将数字:1.1234567890123456789分别存入float变量与double变量中.

float m=1.1234567890123456789f;//如果不加这个f编译会报错.

double n=1.1234567890123456789;

System.out.println("m="+m);

System.out.println("n="+n);

运行之后查看结果:

m=1.1234568

n=1.1234567890123457

可以看到两者都有不同程度的精度损失,而且可以看到double的精度是float的二倍.

字符型

只有一个类型:char,常用,在内存中占16位空间.

注意事项:

1.若想使用它,应该使用单引号将其包括在内,单引号内有且只能一个字符.

char c='c';

2.其实char类型底层为无符号二进制整数类型,每一个数值都有一个对应的字符,JAVA默认采用的是Unicode字符集.

基于第二点,我们可以做如下实验:

char c=20013;

int num='一';

 System.out.println("c:"+c);

 System.out.println("num:"+num);

查看运行结果:

c:中

num:19968

由此可知char可以与不超过范围的整数相互转化,由此也可以查看某个字符对应char的哪一个数值,也可以一个整数对应哪个字符.


布尔型

只有一种:boolean,只有两个值:true和false,占用8位内存空间,用来表示判断条件的真或者假.

引用数据类型

这里只说一下字符串(String)类型.

String与char有什么不同呢?

1.String需要用双引号来定义,而char是单引号.

2.String双引号内可以有任意数量的字符(0~多个),可以是空格,也可以是null.而char单引号内只能有一个字符.

如果我们需要将一种数据类型转换为另一种,就要利用类型转换了.

类型转换

分为两种:隐式转换和显式转换.

1.隐式转换

又称为自动转换,是将占用内存小的类型转换为占用内存大的类型.如:

byte a=2;   

int i=a;//在前面自动添加24个0(二进制).

2.显式转换

又称为强制类型转换,是将占用内存大的类型转换为占用内存小的类型,所以有可能造成精度损失.如:

int a=1;

byte a1=(byte)a;//←等号右侧加占用内存小的类型


数学中有四则运算,JAVA中也有各种运算,此时就需要使用运算符来进行操作了.

运算符

分以下几类:

1.算术运算符:  +,-,*,/,%,++,--

2.关系运算符:  >,<,<=,>=,!=,==

3.逻辑运算符:  &&,||,!,&,|

4.赋值运算符:  =

5.拼接运算符:  +

6.三元运算符:  ?:

算术运算符

加减乘除跟数学里面一样,这里说一下%,++,--.

%在JAVA中是取余的意思:做除法运算时,商n余m,结果为m.

常用于判断某一个数能否被另外一个数整除.

整数取余时,结果是精确值,

浮点数取余时,余数不一定是精确值,可能会有误差.

被除数为正除数为负取余结果为正;

被除数为负除数为正取余结果为负.

 

++,--是自增自减符号,

1.++a,a++代表a自增1,--a,a--代表a自减1,符号与变量之间不能有空格,此时变量的值一定会+1或者-1

2.在与其他符号连用时,,

需要考虑表达式的值.++a,a++,--a,a--整体视为表达式.

符号在前,先运算再赋值:变量先自增自减.再赋值给表达式.

符号在后,先赋值再运算:先把变量的值赋给表达式,变量再自增 自减.

关系运算符:

主要用途是判断两边的条件是否成立.这里说一下!=,==与=的区别.

!= :叫做不等于,!在这里有非的意思.

==叫做等于,而=叫做赋值符号,应该注意区分.

逻辑运算符

有两个及以上的条件需要判断时,就需要使用逻辑运算符.

&&,&代表两边全是true才返回true,有一个false则返回false.

||,|代表两边有一个true就返回true,只有全部为false才返回false.

!代表条件的否定.

那么单个的&,|与成对的&&,||有什么区别呢?这里涉及到就短路运算符了.

  短路运算符

成对的(&&,||)在做判断时,若前面的条件已经可以决定整体的结果时,就不需要判断后面的条件了

    &&在前面的条件为false时,后面的结果无论是什么整体就都是false,就不需要判断后面的条件了.

    ||在前面的条件为true时,后面的结果无论是什么整体就都是true,就不需要判断后面的条件了.

而单个的(&,|)就没有这种短路效果.

赋值运算符

这里说一下+=,-=,*=,/=,%=.这些符号可以用一个式子来解释:

a+=10,等效于a=a+10.

拼接运算符

用来拼接字符串,只要前后有一个是字符串类型,整体的结果就是字符串类型.如:

String str1="12";

int num1=15;

int num2=12;

System.out.println("str1+num1="+str1+num1);

System.out.println("num1+num2="+num1+num2);

运行程序,可以看到输出结果为:

str1+num1=1215

num1+num2=27

即使字符串定义的是数字,也无法通过+进行加法运算,而是进行了拼接操作.

三元运算符

结构: 变量=条件表达式?值1:值2

解读:条件为true,变量为值1,条件为false,变量为值2.

变量的类型需要与值1或值2的类型相同,

而值1与值2的类型要么相同,要么可以自动转换

举个例子:

int num1=15;

int num2=12;

int a=num1>num2?num1:num2;

System.out.println("a=");

运行后的结果为

a=15

这种运算符可以嵌套使用.

猜你喜欢

转载自blog.csdn.net/bujiujie8/article/details/81143738