java 基本类型、变量、运算符、字符串

目录

1. 整型

2. 浮点类型

3. char类型、Unicode编码、boolean类型

4. 变量

4.1 变量初始化

4.2 常量

5. 运算符

5.1 数学函数

5.2 数据类型转换

5.3 位运算

6. 字符串

6.1 截取、拼接、判等、空串

6.2 码点和代码单元

6.2 构建字符串

6.3 字符串String的一些常用API


java一共有8中基本类型。

1. 整型

类型长度取值范围
byte1字节负2的7次方——2的7次方减1
short2字节负2的15次方——2的15次方减1
int4字节负2的31次方——2的31次方减1
long8字节负2的64次方——2的64次方减1

java中,整型的取值范围是固定的,与运行java代码的机器无关,换句话说,就是整型所占的长度是固定的,与平台无关。

2. 浮点类型

类型长度
float4字节
double8字节

值得注意的是:float类型数值后面有后缀F或者f,如果没有的话,那么小数就默认按照double类型处理,当然可以double类型的数值后面添加D或者d。

3. char类型、Unicode编码、boolean类型

Unicode编码标准出现之前,有很不多不同的编码标准,比如:美国的ASCLL、西欧语言中的ISO 8859-I、俄罗斯的KOI-8、中国的GB 18030等等。编码标准不同,就产生了问题,对于同一个编码值,在不同标准下代表不同的字符,所以为了解决这一问题,设计出Unicode一统天下。
在1991年,Unicode 1.0发布,2个字节,最多可以表示65536个字符。但是后来由于大量汉语、日语、韩语等等文字的加入,16位的Unicode已经无法满足了。所以从Java SE 5.0开始,码点指某个字符对应的编码值,Unicode将字符分为17个级别(比如:基本多语言级别,数学符号等等),第一个级别的码点范围是U+0000~U+FFFF,剩下的16个分别是U+10000~U+1FFFF、U+20000~U+2FFFF、、、、U+100000~U+10FFFF。UTF-16编码方式是Unicode标准的一种实现方式。

java中强烈不建议在程序中使用char类型,除非确实需要处理utf-16代码单元。

boolean类型就是true、false,注意不能与整型值进行相互转换。

4. 变量

变量的声明是类型加变量名。变量名必须是以字母开头,并字母或者数字组成。这里的字母含义更广,不仅仅是英文的26个字母,还有其它的一些Unicode代码值,像什么希腊字符等等;这里的数字的含义也更广,不仅仅是0~9,也包含了其它的一些在某种语言中表示数字的任何Unicode代码值,但是我们如何区分一个字符是否是字母呢?Character类有两个静态方法:

Character.isJavaIdentifierStart(char ch)和 Character.isJavaIdentifierPart(char ch)可以判断一个字符是否是“字母”。

4.1 变量初始化

注意一点:变量未初始化就被使用,会报错。

4.2 常量

常量即是值不改变的变量。使用关键字final声明,一旦声明了之后,该变量只能被赋值一次,之后便不能更改。习惯将常量名全部大写。

在多数地方,final会配合static一起使用,将变量声明为静态常量。

5. 运算符

加、减、乘、除、取模分别为+、-、*、/、%。

运算中,运算结果的精度取决于两个运算数中精度高的那个。

整数被0除,将产生一个异常。浮点数被0除,会得到无穷大或NaN结果。

注意点:对于浮点计算,默认情况下,虚拟机会运算在浮点运算过程中,扩展精度,得出最后的值时,直接按浮点数的位数截断,这样精度更高。但是同时也允许在浮点运算的整个过程中,都保持浮点数的位数进行运算,超出了,就立刻截断,需要用关键字 strictfp 对方法进行修饰,这样的方法中的所有浮点运算都严格按照浮点位数进行截断运算。

5.1 数学函数

主要就是Math类中提供的一些数学函数:

三角函数、反三角函数:sin(double a)、cos、tan、asin、acos、atan;

双曲三角函数:sinh、cosh、tanh;

将角度转换为弧度:toRadians(double a);

将弧度转换为角度:toDegrees(double a);

e的次方(即执行e^a,e是对数的那个e):exp(double a);

底数为e的对数:log(double a);

底数为10的对数:log10(double a);

开平方根(根号几):sqrt(double a);

开立方根:cbrt(double a);

求余a % b:IEEEremainder(double a, double b);

向上取整:ceil(double a);

向下取整:floor(double a);

取整,取a最接近的那个整数,如果a是处于中间,比如1.5,那就取偶数整数2,而不是1,:rint(double a);

求向量(x,y)与x轴的夹角:atan2(double y, double x);

幂运算 a^b :pow(double a,  double b);

四舍五入:round(double a)、round(float a);

随机数:random();生成[0, 1)之间的数,伪随机数,生成结果近似平均分布;

求和:int  addExact(int a, int b); long  addExact(long a, long b);如果结果溢出范围,则抛出异常;

求差a - b:int  subtractExact(int  a,  int  b);long  subtractExact(long a , long  b);如果结果溢出,则抛出异常;

求乘积:int  multiplyExact(int  a,  int  b);long  multiplyExact(long  a,  long  b);如果结果溢出,则抛出异常;

自增1:int incrementExact(int a); long  incrementExact(long  a);如果结果溢出,则抛出异常;

自减1:int decrementExact(int a) ; long  decrementExact(long  a);如果结果溢出,则抛出异常;

改变参数符号,比如100,则变为 -100:int negateExact(int a);long  negateExact(long  a);如果结果溢出,则抛出异常;

long转int:int toIntExact(long value);

第一个参数除以第二个参数,商进行floor处理:int floorDiv(int x, int y);long floorDiv(long x, long y);

第一个参数取模第二个参数,商进行floor处理:int floorMod(int x, int y); long  floorMod(long  x, long y);

绝对值:abs(a);

取最大值:max(a,  b);

取最小值:min(a, b);

返回参数的符号,参数为整数,返回1,参数为0,返回0,参数为负,返回-1:double signum(double d);float signum(float f);

x^2 + y^2之后再根号:double hypot(double x, double y);

5.2 数据类型转换

下图给了一个基本数据类型转换图,实线箭头表示转换不会损失信息,虚线箭头表示可能会损失信息。想想,byte为8位,short为16位,int为32位,char为16位(如果是utf-16编码的话),long是64位,float是32位(16位整数部分,16位小数部分),double是64位(32位整数部分,32位小数部分)。记住,小转大,不损失,大转小,可能损失。

其次,如果数据类型强制转换,虚拟机是将数据直接进行截断。

5.3 位运算

位运算都是针对整型类型的。 并(&)、或(|)、异或(^)、非(~);注意:非运算的结果不是说7就变成-7,而是变成-8,而-7的非运算结果是6,就是这个规律。 

其中 & 和 | 可以用于布尔类型。

按位左移 << ,比如1<<3,即将1向左移动3位。按位右移>>,比如1>>3,即将1向右移动3位。并且都用符号位填充高位。

>>> 运算符和 >> 的作用一样,只是用0去填充高位。

这样的话,操作数分为左操作数和右操作数,如果左操作数是int类型,32位,右操作数是36,那么要模32后,再移动,即移动4位。其它类型同理。

下表是运算符的优先级:

6. 字符串

字符串从概念上讲就是一个Unicode字符序列。

6.1 截取、拼接、判等、空串

substring(int a, int b) 方法可以将一个字符串的[a, b)部分截取出来,长度就是b - a, 字符串的每个字符都有个索引位置,从0开始,如果a和b超出范围,会报错。

substring(int a) 方法将字符串的从a位置开始到末尾结束的部分截取出来。

拼接:字符串 + 字符串 即可。用 + 号连起来即可,如果一个字符串和一个非字符串进行拼接时,会将非字符串转为字符串,然后再拼接。 有一个静态方法 String.join("#", "a", "b", "crr");结果为"a#b#crr",第一个参数为间隔内容,后面的若干个字符串是要拼接的。

判等:使用equals()方法,判断的两个字符串的内容是否一样,equalsIgnoreCase()方法,功能一样,只是不区分大小写。 

尽量别用== 判断字符串相等,因为==判断的是两个字符串的存储位置。

空串是"",内容为空,长度为0的字符串,是一个实实在在的java对象。

6.2 码点和代码单元

这两个概念差不多,码点说的是一个字符对应的编码值,代码单元强调的是存储单元。utf-16编码下,一个码点需要的存储空间是一个代码单元。上文已经介绍过,第一级别的字符只需一个代码单元即可,其它的16个级别的字符需要2个代码单元。

"hello".length() 返回的是5,即字符的个数。

"hello".codePointCount(0, 5);返回的是实际的代码单元数量。

charAt(n) ,直接看字符串对应的代码单元返回的是字符串第n个位置的代码单元。一般我们用的字符都是第一级别的,所以一个代码单元对于一个字符,没问题,就怕遇到其它级别的字符,因此尽量别用char类型的原因就在此。

如果我们想查看或者操作码点的话,每个码点其实是int值,int[]  codepoints = "hello".codePoints().toArray() 这样将字符串的每个码点转换成整数数组。String str = new String(codepoints, 0, codepoints.length) 将码点数组转换成字符串。

6.2 构建字符串

有时候,我们需要反复地用一些短的字符串来拼接构建出新的字符串,如果直接采用拼接的方式,就会产生新的String对象,导致费时,费空间。于是StringBuilder类就出现了。

StringBuilder builder = new StringBuilder(); 创建一个空的字符串构建器,当需要添加字符串时,就用builder.append("hello");这样方式来添加。当需要构建字符串时,就直接 builder.toString() 方法来构建字符串。

以下是StringBuilder类里面的方法:

6.3 字符串String的一些常用API

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值