-
概念:在计算内存中一块小的存储空间,用于存储数据,是存储数据的基本单元
-
变量的组成部分:
(1)数据类型:决定了变量在jvm内存中的空间大小
(2)变量名:为了方便查找该内存空间
(3)数据:可以通过变量名进行存储或是查找数据
-
变量的定义:
(1)先声明再赋值: 声明 : 数据类型 变量名; 赋值 : 变量名 = 值; (2)声明的同时并赋值: 数据类型 变量名 = 值; 注意:在同一个类中,变量名不要重名 (3)一次性定义多个同类型的变量: 数据类型 变量名1,变量名2 = 值,变量名3;
package day2; public class Test{ public static void main(String[] args){ //声明 //存储整数: int int a; a=5; System.out.println(a); int c,d=8,f; c=23; f=69; System.out.println(d); System.out.println(c); System.out.println(f); } }
1B = 8b(bit简称b,称为 位/比特位) 1kB = 1024B 1MB = 1024KB 1GB = 1024MB 1TB = 1024GB 3. 1. 注意:Java是一种强类型的语言,对应的数据必须存储在对应的变量中 1. 基本数据类型(原始数据类型、简单数据类型) ``` (1)整数类型 byte 1B -128 ~ 127 short 2B -32768 ~ 32767 int 4B -2147483648 ~ 2147483648 long 8B -922京 ~ 922京-1 注意:long的字面值需要加l或是L(建议使用L,区分数字1和l) 字面值:程序中可以给某种类型变量赋的值 (2)小数类型(浮点类型) double 8B 双精度 float 4B 单精度 注意:float字面值后面必须加f或F,不能省略 double字面值后面可以加d或D,可以省略 float类型超过精度后会将后面几位四舍五入,一共保存七位即可 double类型精度会更高,大概在16位保证正确 float和double都可以采用科学计数法的方式进行存储,采用近似值 double ds = 12345678912.34;// 1.234567891234E10 4Bfloat存储的范围要比8B的long存储的数据范围更大,原因:Java中浮点底层可以采用科学计数法的形式存储(近似值),float相对于long是大数据类型 (3)字符类型 char 2B Java中的字符字面形式有以下三种: a.单引号('')直接引起来的一个字符 char c ='A'; char c2 = '中'; char c3 = '+'; char c4 = '8';//0~9之间的每个数字可以作为一个字符 b.可以以整数形式作为char字面值,整数范围是0~65535(29233--爱) char c1=48;//字符0 char c2=65;//字符A char c3=97;//字符a c.以十六进制的unicode形式进行存储 char c ='u0041';//等价于 十进制的65,存储'A'字符 Java中的转义字符: n 换行 t 水平跳格 \ 反斜杠 ' 单引号 " 双引号 (4)布尔类型 boolean 1B 字面值 true/false 注意:Java中true代表成立(某种关系) false代表不成立 Java中boolean中字面值只能是true/false; 区分于c语言中的boolean(0/1) ``` 2. 引用数据类型(对象数据类型) ``` 数组、对象、接口、集合等都是引用类型(对象类型) 目前以String的应用来讲解 引用数据类型: String:字符串用双引号("")引起来的一个或是多个字符 String s1 = "hello"; String s2 ="a"; String s3 = "孙朝卿"; ``` ``` 例题: 姓名 String name 年龄 int age 成绩 double/int score 性别 boolean sex=true; char c='女'; String s = "男"; 电话 String tel(方便校验);long l=1312321545l; 身份z号 String id;(不能用long,有的身份z号最后一位会存在x) 地址 String address 商品的数量 int shu 商品的价格 double price ``` ## 三、数据类型的转换 1. 自动类型提升 ``` (1)应用场景:将小数据的变量赋值给大数据类型的变量,可与直接赋值 注意:存储数据范围越大,对应的数据类型为大数据类型 (2)语法: 源数据类型 变量名 = 值;//byte b = 6; 目标类型 变量名 = 源数据类型的变量;//int a = b; 注意:目标类型大于源数据类型可以直接赋值 (3)自动类型提升的规则(小数据类型赋值大数据类型 ) a.byte->short->int->long->float->double b.char->int->long->float->double 面试题目:分析以下代码编译是否通过,不通过说明原因? char c = 95;//编译通过 int i = 65; char cs = i;//编译不通过,错误原因违反自动类型提升规则 ``` 2. 强制类型转换 ``` (1)应用场景:将大数据类型的变量赋值给小数据类型的变量,必须通过强制类型转换 (2)语法: 源数据类型 变量名 = 值 ;//double d =3.6; 目标类型 变量名 = (目标类型)源数据类型的变量; int i = (int)d; (3)强制转化结果: a.如果将float/double浮点类型的数据强制转换为整数,则小数点后面的部分直接截断 double d = 3.6; int i = (int)d;//3 b.强转的大数据类型变量中存储的数据在小数据类型的变量的范围内,则不会影响内容 c.强转的小数据类型变量中存储的数据不在小数据范围内,则从底层存储低位进行截断 int i = 257; byte b = (byte)i;//1 ``` ## 四、表达式 1. 表达式:由变量、字面值、运算符等连接组成的式子,通常有一个结果 2. 对于表达式结果的处理方式:(根据实际开发需求来决定) (1)如果对结果只使用一次,直接在使用的地方写表达式即可 (2)如果对结果多次使用,建议定义一个对应类型变量进行存储 3. 表达式结果对应变量存储规则 (1)如果表达式中有double,则结果为double (2)如果表达式中有float,则结果为float (3)如果表达式中有long,则结果为long (4)其余情况,结果都是int byte和byte byte和short short和short int分别和short byte ``` 面试题目:写出以下代码编译是否正确,正确写出结果,不正确分析原因 byte b=1; b=b+1;//int b2=b+1; 分析:编译报错,原因是b=b+1结果类型是int类型,需要存储在int类型的变量中 ``` ## 五、运算符 1. 算术运算符 ``` + - *(乘法) /(除法) %(取模,取余) 注意:+ 在Java中有两种使用方式: 第一种情况:+两端都为数值类型,为加法运算 第二种情况:+两端只要有一端为String类型,此时的+为字符串拼接功能;则结果类型一定是String类型 System.out.println(a+"hello"+b);//5hello2 System.out.println(a+b+"hello");//7hello System.out.println(a+true+"hello");//编译错误 System.out.println(a+"hello"+true);//ahellotrue System.out.println(a+b+"hello"+true);//7hellotrue System.out.println("hello"+true+a+b);//hellotrue52 ``` 2. 赋值运算符 ``` = :直接赋值 += :求和之后再赋值 -= :求减之后赋值 *= /= %= 注意:+=在应用层没有自动类型提升 byte b=1; b= b+1;//结果为2 //底层:byte+1-->int,再强转(byte)(b+1) ``` 3. 一元运算符 ``` ++(自增) --(自减) int c =a++;先使用a原始数据,作为表达式的结果,然后再将a加1 先使用再加1运算 int c = a; a = a+1; int cc= ++a;先对a变量自身加一,然后再使用加一之后的结果作为表达式的结果 先加一,在使用 a = a+1; int c = a; 实际开发应用:通常使用a++/a--/++a/--a 让a变量的内容随着循环 *** 作自身发生改变,最多使用a++ ``` 4. 关系运算符 ``` 两个 *** 作数进行比较 >大于 >=大于等于 <小于 <=小于等于 ==等于 !=不等于 注意:由关系运算符连接的表达式结果为布尔类型,所以被关系运算符连接的表达式称为布尔表达式;true-关系成立false-关系不成立 ``` 5. 逻辑运算符 ``` 连接两个结果类型为boolean类型的表达式 &&:逻辑与,两端连接的布尔表达式结构都为true,最终结果为true 只要有一段结果为false,最终结果为false [短路运算符] ||:逻辑或,两端连接的布尔表达式的结果只要有一端为true,最终结果为true 两端同时为false,最终结果才为false !:逻辑非,对原来的布尔表达式结果进行取反 ----------------------------------------------------------------------- &:逻辑与,两端连接的布尔表达式结果都为true,最终结果为true[非短路] |:逻辑或,两端连接的布尔表达式的结果只要有一端为true,最终结果为true 两端同时为false,最终结果才为false 面试题目:写出&&和&区别 &&:短路运算符:第一个布尔表达式结果为false,则后面的布尔表达式不再执行 &:非短路运算符:不管第一个布尔表达式的结果为true/false,后面的布尔表达式都必须执行 注意:在开发时,需要用到逻辑与运算符时,如果可以使用&&也可以使用&,则通常采用&&,提升执行效率 ``` 6. 三元运算符 ``` (1)结构: 布尔表达式?表达式1:表达式2 (2)执行原理:?之前的布尔表达式结果为true,则执行表达式1,否则执行表达式2 (3)案例: int a = 8; int r = a>9?a+1:a-1; System.out.println(r); System.out.println(a<6?a+3:a-3) ; ```
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)