第二章 变量、数据类型和运算符

版权声明:转载麻烦告知。 https://blog.csdn.net/qq_40064948/article/details/81738678

一、标识符

作用:在java中的标识符就是用来给java中的一些类、方法、变量、包命名的。

命名规则:以美元符号$、_下划线、字母开头,后跟$、_下划线、字母、数字的任意组合。不能以数字开头,大小写敏感,长度无限制,不可以是java中的关键字。

注意:标识符中的字母:包括了中英文。由于Java中没有采用通常语言使用的ASCII字符集。而是采用了unicode这样的标准的国际字符集。储存的数量更多。

二、关键字/保留字

在标识符中不能以java中的关键词作为类等的命名。Java关键字是Java语言保留供内部使用的,如class用于定义类。

abstract

assert

boolean

break

byte

case

catch

char(character)

class

const

continue

default

do

double

else

extends

final

finally

float

for

goto

if

implements

import

instanceof

int

interface

long

native

new

null

package

private

protected

public

return

short

static

strictfp

super

switch

synchronized

this

throw

throws

transient

try

void

volatile

while

 

 

 

 

三、变量

3.1变量的含义

一个老板有一个100W平的房间,让工匠将这个100W平的大房间分成若干个下啊哦房间,并且每个房间的墙面是活动的。原则是每个小房间只能住进一个客户,当有一家三口的客户入住时,就将3个小房间的墙面活动开,使3个房间融合再一起,一家三口既能住在一起,又保持了每个房间只能住一个客户的原则。并将这个3个小房间融合在一起的房间叫做荷花厅。在这之中老板就是操作系统,客户就是程序员,荷花厅就是变量名,每个小房间就是内存单元(每个内存单元只能存一个字节)。当程序员想要多个内存单元一起用时,操作系统就把这几个内存单元合起来,程序员则需要给这些内存单元取一个名字,即变量名。

3.2定义变量的方法

int a = 10 ;

变量名首字母小写,第二个单词首字母大写(骆驼法),当我们定义一个变量时,程序员不成文的规定将变量名定位: i 、j 、k 。变量只能赋一个值。储存这个10的内存就叫a,即a是变量名,代表内存空间。a是一个变量他的值可以是10也可以赋别的值给它,但是在一个作用域只能申明一个a。

JAVA中不能不赋值使用变量,一定要先申明时就赋值。当你需要先申明一个变量但是不着急赋值的时候,可以先赋值-1,来储存一个值,以免系统报错,在后面的代码中再替换。

变量只存在于定义的作用域内,一旦出了这个作用域这个变量就不存在了。

四、常量

final int a = 10 ;

JAVA中常量分为两种:字面常量、符号常量。一种意思,就是一个值,这个值本身,我们可以叫它常量,举几个例子:整数常量:123、实数常量:3.14、字符常量:’a’、逻辑常量:true\false、字符串常量:”helloworld”。这是说法的问题,比如7这个数,我们就可以说“一个int类型的常量7”。一种意思,Eg:final int aaa = 1;。常量表示不可变的变量,然后只要赋值之后,就不能改变了,就不能再次被赋值了。Eg:aaa赋值了1,那么aaa的值是绝对不能再被更改了,只能是1。这就是常量。

五、数据类型

JAVA中只有两大数据类型:原始型(基本数据类型)(byte.short.long.int.float.double.char.boolean)和引用型(class、interface、数组)。

//声明字节型数据 将11的值赋给b变量  

byte b = 11;

//声明一个短整型数据

short s = 22;

//声明一个整型数据 

int i = 33;

//声明一个长整型数据

long l = 123456789L;

//声明一个char型数据

chat c = a;

//声明一个double型数据

double d = 33.192;

//声明一个float型数据

float f = 33.123f;

Java是一种强类型语言,常量是有数据类型的,变量都必须声明其数据类型。boolean型只有是否(true、false)这两个值。

浮点类型的数据默认的类型double,将一个double类型的字面常量之赋给一个float变量时需要在其后加“f”,“F”。

在java中,整数的字面常量值是int类型,在将一个超过int类型范围的字面常量赋给一个long类型的变量时,需要注意,在字面常量值后加“l”或者“L”。

char类型的数据可以接收一个没有定义类型的整数的字面常量值,在编译阶段会编译为一个对应unicode表中的字符。在java中允许出现转义字符。就是将一个特殊的字符通过特殊的方式改变了该字符原有的意义。

六、运算符

运算符分为算术运算符、关系运算符、赋值运算符、逻辑运算符四大类。

6.1算术运算符

一元运算符:++ 、-- ,二元运算符:+、-、*、/(整型除整型,结果为整型5/2=2)、%(模:取余数5%3=2,模数不能为0,小数模小数为小数本身,负数取模无意义,小数float型不取模),三元运算符:表达式1?表达式2:表达式3; 计算表达式1的结果,只要可以得到一个boolean类型的值即可,如果结果为true,则执行表达式2,反之执行表达式3。

ASCll(AmericanStandardCodeforInfomationInterchange)美国信息交换标准码:赋以128个字符唯一值的标准,包括上、下档的字母,数字,标点符号。 a-z是97-122,A-Z是65-90,0-9是48-57。

一元运算符在单独运算是写前写后无所谓(a++ 与 ++a 相同),但是在复合使用时++写后是先使用后自增,++写前是先自增后使用。

+号有三种意义:相加、连接符、正号。

6.2赋值运算符有

+= 、 -= 、 *= 、 /= 、 %=。

6.3关系运算符

> 、 >= 、 < 、 <= 、 == 、 !=(不等于)。最终结果为boolean型。一般配合if语句来使用。变量什么时候使用什么时候定,这样不占用内存。程序中的断言就是数学中的假定。

6.4逻辑运算符

&& (逻辑与)、 ||(逻辑或) 、 !(非) 。也是boolean型。与的优先级高于或。!(非),即真变假,假变真。‘2’+‘2’=100,因为0在ascll码中是48,2是50,这里用单引号括起来的是字符2,字符2的编码是50,所以是50+50=100。如果是“2”+“2”则=22。&&、||与&、|的区别:前者&&当左边为假时不再执行右边代码,结果为假。||当左边为真时不再执行右边代码,结果为真。提高效率。

6.5运算符优先级问题

优先级

运算符

结合性

1

()

括号运算符

由左至右

1

[]

方括号运算符

由左至右

2

!、+(正号)、-(负号)

一元运算符

由左至右

2

~

位逻辑运算符

由左至右

2

++、--

递增与自减运算符

由左至右

3

*、/、%

算术运算符

由左至右

4

+、-

算术运算符

由左至右

5

<<、>>

位左移、右移运算符

由左至右

6

>、>=、<、<=

关系运算符

由左至右

7

==、!=

关系运算符

由左至右

8

&(位运算符AND)

位逻辑运算符

由左至右

9

^(位运算符XOR)

位逻辑运算符

由左至右

10

|(位运算符OR)

位逻辑运算符

由左至右

11

&&

逻辑运算符

由左至右

12

||

逻辑运算符

由左至右

13

?:

条件运算符

由右至左

14

==

赋值运算符

由右至左

七、类型转换

7.1自动转换

在类型兼容的情况下,小类型可以自动转为大类型。Boolean型不能自动转换,与任何一个类型都不兼容。1字节等于8位。转换的大小顺序:byte-char(1字节)-short-int(4字节)-float-double / int-long-double(8字节)

int a = 10;

double b = 12.5;

char c = 'a';

b = a ;

这里b是double型8字节,a是int型4字节,那么将a这个小盒子的东西给b大盒子的东西,大盒子b可以装下,在这里a自动转换成double型。所以编译不会报错。同理将char型的c也能放进b。但是如a=b,则会编译报错,因为b是大盒子8字节,放不进小盒子a,不能完成自动转换类型。

7.2强制类型转换

int num1 = sc.nextInt();

int num2 = sc.nextInt();

float result = num1/(float)num2;

这里result是一个folat型变量,但是num1和num2都是整型变量,则需要将这两个其中一个变量强制转换成float型即可。整数除以浮点数得到的是整数,进行了自动转换,同理,整数除以浮点数得到的是浮点数。

int a = 5;

double b =12.5;

//将double类型的b强制转换成int型后,将b的值赋给a,但并没有改变b的值。所以打印出来的a=12,b=12.5。

//浮点型数据强制转换成整型后,不会保留小数,也不会四舍五入,12.1会转换成12,12.9一样转换成12。

a = (int)b ;

//操作系统对二进制的操作是最快的(拓展)。

//<<是移位运算符,向左移。>>是向右移。将a向左移一位,a的赋值是3,3的二进制数是

int a = 3;

a = a << 1;

//这里int是4字节,就是4*8=32位。在二进制中一共有32位。int a = 3 那么这个3就是00000011前面再加上24个0。将a左移1位就变成了00000110。这时候的00000110前面加24个0就表示的是6。用移位的方法可以最快做出“a的2倍”的运算。a*2虽然也能求出a的两倍但是效率很低。移位是直接通过2进制运算,操作系统对于二进制的运算是最快的。

7.3总结

赋值运算中:大=小 将进行自动转换,相等 不发生转换,小=大 需要强制转化为小类型。算术运算符:在算术运算符中找到最大的byte-->short-->int-->long-->float-->double,byte short中的特例,只要字面值不超过所复制的类型范围即可正常赋值。扩展运算符隐含了强制类型转换 不光是底层编译快的而已。所以s=s+1 不直接等价于 s+=1;而是根据s的类型来的。

猜你喜欢

转载自blog.csdn.net/qq_40064948/article/details/81738678