Java数据类型
对于java来说,我们将变量分为两个大类
声明变量符合以下规则
变量类型 变量名=初值;
使用小驼峰命名;
类级变量命名使用大驼峰;
编码表:二进制和生活中文字的对应关系表。
ASCII码表:美国统一二进制转换编码表。
GB2312:信息交换用汉字编码字符集·基本集;
Unicode:国际统一字集编码!
1. 基本数据类型。(是关键字,全部是小写。)
数值型:
整数型:
1.1 Int –整型 4字节(byte) 带符号位的整数(int a=1;)-2^31~2^31-1
1.2 Byte –字节型 1个字节(8位,每一位叫做byte位,8个(byte位)二进制位表示,能够表示2^8个数据) 带符号位的整数(byte b=0;)10000001 整数范围:-128~127.
1.3 Short-短整型 2个字节 带符号位的整数(short s=1;)整数范围:-2^15~2^15-1(-32768~32767);
1.4 Long-长整型 8个字节 带符号位的整数(long l=1L;)-2^63~2^63-1,定义长整形必须加上L。long类型不加L会自动降级为int。取余数得到最后的值。
浮点类型:
1.5 Float-单精度浮点型 4个字节 带符号位的浮点数(float f = 0.1f;),定义float必须加上F。
1.6 Double-双精度浮点型 8个字节带符号位的浮点数(double d=o.1D;)
字符型:
1.7 Char-字符型 (单个数字,字母,符号。。。。)2个字节 无符号(char c=’1’;)用单引号定义。0~2^16-5(0~65535);
Boolean型:
1.8 Boolean 布尔型true/false(boolean b1=true;)
2. 引用数据类型。(大驼峰。)
1.1 类类型
1.1.1 String -2个字节 字符串引用类型(string s=”abc”;)
1.1.2 BigDecimal-大浮点型,精度非常高,一般用于钱的存放。
1.2 接口类型
1.3 数组类型
1.4 枚举类型
类型转换
小转大直接转,大转小强制转。
b= (byte) s;强制转型(可能会丢失精度,只能在基本类型中转换)
格式化输出:%d:占位符 d%:整数,f%:小数,%s:字符串,%c:字符型。
Java中的参数传递问题
Java中只有值传递(地址也是值)。
基本类型:形式参数的改变不影响实际参数
引用类型:形式参数的改变直接影响实际参数(此时传递的是地址,也就是对象的引用,所以如果改变了,其他的引用都会改变。)
String作为参数传递,效果和基本类型作为参数传递是一样的。
运算符分类:
- 算术运算符(加减乘除)
- 关系运算符(> ,>=,<,<=,!=,==)
- 位运算符
-
- 按照二进制位(byte位)进行运算。
- 应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型。
位运算符作用在所有的位上,并且按位运算.
A=60.B=13;
技巧:二进制0是false,1是true。
& |
如果相对应位都是1,则结果为1,否则为0 |
(A&B),得到12,即0000 1100 |
| |
如果相对应位都是0,则结果为0,否则为1 |
(A | B)得到61,即 0011 1101 |
^ |
如果相对应位值相同,则结果为0,否则为1 |
(A ^ B)得到49,即 0011 0001 |
〜 |
按位补运算符翻转操作数的每一位,即0变成1,1变成0。 |
(〜A)得到-61,即1100 0011 |
<< |
按位左移运算符。左操作数按位左移右操作数指定的位数。 |
A << 2得到240,即 1111 0000 |
>> |
按位右移运算符。左操作数按位右移右操作数指定的位数。 |
A >> 2得到15即 1111 |
>>> |
按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。 |
A>>>2得到15即0000 1111 |
- 逻辑运算符(&&,||,!)
- 赋值运算符(有关于等的都是赋值!)
- 其他运算符()
-
- 条件运算符(三元运算?:)
- instanceof 运算符:该运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)。
-
-
- String name ='James';boolean result = name instanceofString;// 由于 name 是 String 类型,所以返回真
-
- 运算符优先级:(优先级依次降低)
类别 |
操作符 |
关联性 |
后缀 |
() [] . (点操作符) |
左到右 |
一元 |
+ + - !〜 |
从右到左 |
乘性 |
* /% |
左到右 |
加性 |
+ - |
左到右 |
移位 |
>> >>> << |
左到右 |
关系 |
>> = << = |
左到右 |
相等 |
== != |
左到右 |
按位与 |
& |
左到右 |
按位异或 |
^ |
左到右 |
按位或 |
| |
左到右 |
逻辑与 |
&& |
左到右 |
逻辑或 |
| | |
左到右 |
条件 |
?: |
从右到左 |
赋值 |
= + = - = * = / =%= >> = << =&= ^ = | = |
从右到左 |
逗号 |
, |
左到右 |
进制转换:
整数常量进制:
前面加0表示8进制,前面加0x表示16进制。
8进制数,其实就是二进制位中的3个二进制位为一个八进制位。
16进制数:其实就是二进制中的四个二进制位为一个16进制位。
十进制转任意进制的方法。
/**
*
* @param num传入的你需要转换的十进制数
* @param base与运算需要传入的模具,如果是2进制的话,传1,如果是8进制的话传7,如果是十六进制的话传15.
* @param offset像右边移动步长,2传1,8传3,十六传4。
* @return,返回一个char类型数组。
*/
public char[] toChange(int num,int base,int offset){//十进制转任意进制。
char[] chs={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
char[] arr=new char[32];
int pos=arr.length;
// char[] arr1=new char[32];
while(num!=0){
int temp=num & base;
arr[--pos]=chs[temp];
num =num >>> offset;
}
char[] newarr=new char[arr.length-pos];
for(int i=0;i<newarr.length;i++){
newarr[i]=arr[i+pos];
}
return newarr;
}
Java数据结构:
栈 :先进后出(子弹夹)
队列 :先进先出(排队)
数组 :查询快,增删效率低。
链表 :查询慢,增删快。
由一个链子把多个结点连起来组成的数据。
结点:有数据和地址组成。(数据域和指针域组成)
树 :
哈希表 :是一个元素为链表的数组。综合了数组和链表的好处(新华字典)
特点:查询快,增删快。
哈希表依赖于哈希值存储。
唯一性:底层依赖对象:int hashCode() 和boolean equals(Object obj)
面试题:常见数据结构的优缺点?(数据结构+算法)。