Java基本数据类型与运算符

24 篇文章 9 订阅

一、基本数据类型

java是强类型语言,共有8种基本数据类型:4种整型、2种浮点型、char字符型和boolean型。

整型

类型长度取值范围
byte1字节-128~127
short2字节-32768-32767
int4字节-2^31-1~2^31-1
long8字节-2^63-1~2^63-1

整型的范围与运行java代码的机器无关,这一点和C、C++不同,保证了代码在不同的平台之间的可移植型。
int最为常用,char和short主要用于特定场合,比如底层处理文件、处理需要占用大量存储空间的数组。要表示的数据超过int类型的范围时使用长整型int.

浮点类型

浮点类型用于表示java中的有小数部分的数值。

类型长度取值范围
float4字节大约±3.402 823 47E+38F(有效位为6~7位)
double8字节大约±1.79769313486231570E+308(有效位为15位)

float精度很难满足需求,一般使用double类型.

char类型

char类型用来表示单个字符,比如’A’.”A”表示长度为1包含一个字符A的字符串。

boolean

boolean类型有2个值:true和false,布尔类型不能和整型值进行相互转换。


变量

变量命名规则:以大小写字母、下划线、开始,后面跟字母或数字。java中的字母范围包括’a-z’、’A-Z’、下划线(_)、美元符等。不能讲java关键字设置为变量名。

常量

java中使用final关键字指示常量:

final double HEIGHT = 100;

final关键字表示变量只能被赋值一次, 一旦被赋值以后就不可以被修改。

类常量

类常量可以被一个类中的多个方法使用,使用关键字static final修饰,类常量定义在main函数的外部。如果使用public static final,即一个类常量被声明为public,那么其他类多方法也可以使用这个常量。

数学函数与常量

Math类包含了多种数学函数。

函数功能
abs(a)求绝对值
sqrt(a)求根
pow(a,b)a的b次方
max(a,b)返回两个数中最大值
min(a,b)返回两个数中最小值
floor(a)向下取整
round(b)向上取整
sin()正弦
cos()余弦
tan()正切
atan()余切

二、元算符

算术运算符

java中使用+、-、*、/ 表示加、减、乘、除四种运算,%表示求余操作。当参与/运算的两个数都是整数时表示整数除法,否则表示浮点除法。15/7=2,15%2=1,15/2.0=7.5.
简化的二元算术运算符号:

  1. +=
    x+=4,等价于x=x+4
  2. -=
    x-=4等价于x=x-4
  3. *=
    x*=2等价于x=x*2
  4. /=
    x/=2等价于x=x/2

自增、自减运算符

前缀形式自增:++n
后缀形式自增:n++

int a=6;
int b=6;
int m=++a //m=7,a=7
int n=b++ // n=b,b=7

前缀形式运算时n先加1后运算,后缀形式运算时n先运算后加1.

关系运算符

运算符功能
==检测等号两边值是否相等
!=检测等号两边值是否不相等
>大于
<小于
>=大于等于
<=小于等于

逻辑运算符

&&表示逻辑与,A&&B当且仅当A和B都为真是A&&B为真,A||B只要A或B有一个为真时A||B为真.&&与||按照短路方式求值,如果第一个操作数已经可以确定表达式的结果,就不再计算第二个操作数。

x!=0 && 1/x>x+y

位运算符

四种位运算符:

  • & 与
    以29为例,29的二进制表示为(11101),16 的二进制表示为(10000),与运算后29&16的结果为16(1 0000)
  System.out.println(29&16);  //16
  • | 或
  • ^ 异或
  • ~ 非
  • << 左移
    左移和十进制小数点移动类似,小数点左移一位放大10倍,在计算机中左移一位扩大2倍。左移n位扩大2的n次方倍.
  • >> 右移
    右移与左移正好相反。
int a=16;
System.out.println(a>>2); //a=4
System.out.println(a<<2); //a=64

字符串

字符串不是java基本的数据类型,而是java标准库中的一个String类,每个用双引号引起来的字符串就是String类的一个实例。如:String name="Tonny"

1.字符串的构造

第一种方式:

String name="Tonny"

第二种方式:

String name=new String("Tonny");

第三种方式:

 byte[] arr = {65, 66, 67, 68};
 String s = new String(arr); //s=ABCD

第四种方式:

byte[] arr = {65, 66, 67, 68,69};
String s = new String(arr, 1, 4); //s=BCDE

2.子串

使用substring可以从一个较大的字符串中提取一个子串。比如:

 String greeting="HelloWorld!";
 System.out.println(greeting.substring(2));//llo World!
 System.out.println(greeting.subSequence(2, 6));//lloW 

substring() 接受一个参数时,参数为子串开始位置,字符串从0开始计算位置。
substring()接收2个参数时分别为开始位置和结束位置,截取的字符串包含开始位置不包含结束位置。

3.拼接

使用”+”可以拼接2个字符串。例如;

 String str1="Hello";
 String str2="World!";
 String str3=str1+str2;
 System.out.println(str3);//HelloWorld

一个字符串和和一个非字符串进行拼接时,后者被转换为字符串类型。在java中任何一个字符串对象都可以转换为字符串。

4. 不可变字符

java中没有修改字符串的方法,java使用拼接再赋值的方式来实现字符串的修改。原来的字符串仍然存在,只是变量指向了新的字符串而已。hello永远是包含h、e、l、l、o的代码单元序列。

5.检查字符串是否相等

这个问题经常出现在各种笔试、面试题中。字符串的equals方法用来检查2个字符串的值是否相等,==比较的是2个字符串的地址是否相同,即是否指向的是同一个字符串。使用substring、+截取或者拼接的字符串虽然内容一样,但是地址不一样。

 String a="ucas";
 String b=a.substring(0,3)+"s";
 System.out.println("ucas".equals(a));//true
 System.out.println(a.equals(b)); //true
 System.out.println(a==b);  //false

6.空串与Null串

空串是一个String 对象,内容为空,长度为0。null表示没有对象和它关联。判断一个字符串对象是不是为空串:

if(str.length==0)
或者
if(str.equals(""))

检查一个对象既不为null也不为空:

if(str!=null&&str.length!=0)

7.字符串Api

  • boolean endwith()判断字符串后缀
  • equalIgnoreCase()忽略大小写比较
  • int indexOf() 子串首次出现位置
  • int lastIndexOf() 返回字符串最后一次出现位置
  • int length() 返回字符串长度
  • boolean startWith(prefix)判断字符串是否以prefix开头
  • String toLowerCase 转为小写
  • String toUpperCase 转为大写
  • String trim()删除尾部空格

8.字符串的本质

地址比较:
字符串”abc”在常量池中,s1和s2指向的是同一个对象,因此不论是比较地址还是比较值结果都是一样的。

  String s1 = "abc";
  String s2 = "abc";
  System.out.println(s1 == s2);  //true
  System.out.println(s1.equals(s2));  //true

再看下面的例子:

   String s1 = "abc";
   String s2 = new String("abc");
   System.out.println(s1 == s2);        //false
   System.out.println(s1.equals(s2));   //true

这时,s1指向的是字符串常量池中的”abc”,s2是字符串对象,位于堆内存中,因此s1和s2的地址不一样,不是同一个对象,字符串值一样。

9 字符串切分

 String str1 = "abc,def,hig";
 String[] strArr = str1.split(",");
 for(String str:strArr){
    System.out.println(str);
 }

打印结果:

abc
def
hig

特殊的字符需要转义,比如,.本身是正则表达式中的占位符,使用\转成英文实心句号:

String str1 = "abc.def.hig";
String[] strArr = str1.split("\\.");

10.字符串转字符数组

 String s = "ab你好";
 char[] cArr = s.toCharArray();
 for (char c : cArr) {
     System.out.println(c);
 }

打印结果:

a
b
你
好

11.字符串按字典顺序排序

使用TreeSet:

String[] strArr = {"recursive", "raw", "platform", "rank", "register", "symbol"};

TreeSet treeSet = new TreeSet<>();

for (String str : strArr) {
    treeSet.add(str);
}

System.out.println(treeSet);

12.按字典顺序逆序排序

逆序排序只需要在TreeSet实现Comparator接口,重写compare()方法:

String[] strArr = {"recursive", "raw", "platform", "rank", "register", "symbol"};

TreeSet treeSet = new TreeSet<>(new Comparator() {
   @Override
   public int compare(Object o1, Object o2) {
     return o2.toString().compareTo(o1.toString());
            }
   });
   for (String str : strArr) {
        treeSet.add(str);
   }
   System.out.println(treeSet);

结果:

[symbol, register, recursive, raw, rank, platform]

13.StringBuffer和StringBuilder

StringBuffer是字符串缓冲区, 线程安全,单线程操作单时候也要不停的判断锁,后来独立出来一个StringBuilder,线程不安全,但是速度快。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

esc_ai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值