初识java数据类型以及运算符(力作)

Posted 飞人01_01

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初识java数据类型以及运算符(力作)相关的知识,希望对你有一定的参考价值。

初识JavaSE数据类型及运算符


一、Java语言简介

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。

Java具有简单性、面向对象、分布式健壮性安全性、平台独立与可移植性、多线程、动态性等特点 [2] 。Java可以编写桌面应用程序Web应用程序分布式系统嵌入式系统应用程序等。

java语言的创始人之一: 詹姆斯 · 高斯林

  • 编程环境

JDK(Java Development Kit)称为Java开发包或Java开发工具,是一个编写Java的Applet小程序和应用程序的程序开发环境。JDK是整个Java的核心,包括了Java运行环境(Java Runtime Environment,简称为JRE,一些Java工具和Java的核心类库*(Java API)*。

JRE是个运行环境,JDK是个开发环境。因此写Java程序的时候需要JDK,而运行Java程序的时候就需要JRE。而JDK里面已经包含了JRE,因此只要安装了JDK,就可以编辑Java程序,也可以正常运行Java程序。但由于JDK包含了许多与运行无关的内容,占用的空间较大,因此运行普通的Java程序无须安装JDK,而只需要安装JRE即可。

JDKJRE以及JVM三者是什么关系呢???

  • 集成开发环境

    Eclipse: 一个开放源代码的、基于Java的可扩展开发平台。Eclipse安装教程

    IntelliJ IDEA: 开放源码的Java集成开发环境,适用于各种客户机和Web应用。IntelliJ IDEA 安装教程

二、Java中的main方法

  1. 源文件(扩展名为*.java):源文件带有类的定义。类用来表示程序的一个组件,小程序或许只会有一个类。类的内容必须包含在花括号里面。

  2. 类:类中带有一个或多个方法。方法必须在类的内部声明。

  3. 方法:在方法的花括号中编写方法应该执行的语句。

  4. 类名,必须跟java文件名相同,以上图为例,类名是 demo ,则对应的java文件为 就是 demo.java。

  5. java中的main方法,是没有返回值的。

图中红点1: public,称为 访问权限修饰符。如其名,访问该类或者方法,要有一定权限的。

图中红点2: class,是一个关键字,代表这是一个

图中红点3: static, static也是一个关键字,用来定义类、方法、变量修饰符的关键字。static修饰的 类 、方法,不需要实例化,就能进行调用。

图中红点4: String[] args, 是一个字符串数组。 在命令行的窗口运行时,可以在命令行输入参数,也称为命令行参数

三、数据类型

1、整形

int n = 10; //定义一个整形变量
System.out.println(n);
System.out.println(Integer.MAX_VALUE); //这两个print,可以输出int的最大值以及最小值
System.out.println(Integer.MIN_VALUE); //Integer,是int的包装类
  1. int 表示变量的类型是一个整型
  2. 变量名是变量的标识. 后续都是通过这个名字来使用变量
  3. Java 中 = 表示赋值(和数学不一样), 意思是给变量设置一个初始值.
  4. 初始化操作是可选的, 但是建议创建变量的时候都显式初始化.
  5. 最后不要忘记分号, 否则会编译失败.
  6. // 表示注释. 注释作为代码的解释说明部分, 不参与编译运行.

: 在java中,一个整形占4个字节,不像C语言那样,java的数据类型不跟操作系统挂钩的。

范围是 -231 ~ 2 31 - 1 。

2、长整形

long n = 10L; //long类型的变量,后面赋值时,需要加L,加以表示
System.out.println(n);
System.out.println(Long.MAX_VALUE); //Long ,是long类型的包装类
System.out.println(Long.MAX_VALUE); //long类型的最大值 最小值
  1. 基本语法格式和创建 int 变量基本一致, 只是把类型修改成 long
  2. 初始化设定的值为 10L , 表示一个长整型的数字. 10l 也可以.
  3. 使用 10 初始化也可以, 10 的类型是 int, 10L 的类型是 long, 使用 10 L 或者 10 l 更好一些.

: long类型,在java中,占8个字节。取值范围是 -263 ~ 2 63 - 1.

3、双精度浮点型

double n = 3.14;
System.out.println(n);

:double占8个字节。且在内存中的存储方法,遵循IEEE754标准(和C语言一样)。用有限的空间去表示无限的小数,势必会造成精度的损失。

4、单精度浮点型

float n = 3.14F;  //注意,float后面的赋值,必须要加F/f加以区分。jvm默认的浮点数是double,所以需要加F区分
System.out.println(n);

: float占4个字节,因为占得空间比double小,所以没有double的精度高,存储方式还是遵循IEEE754标准,所以在使用中,一般还是推荐使用double类型的浮点数。

5、字符型

char ch = '酷';  //值得注意的是,java中的char,跟C语言的,完全不一样。这里占2个字节
System.out.println(ch);

: java中的char类型,与C语言中的不一样。java中的char占两个字节,且编码方式,采用Unicode编码格式。C语言采用的ASCII码。

java中的char,取值范围是 0 ~ 65535。这里需要知道,这是java中的一个无符号数。像java中的其他类型都是有符号数

编译时: 如果出现乱码的情况而编译不过去,只需在换成UTF-8的编码格式即可。或者命令行编译时:javac * .java -encoding utf-8

6、字节型

byte value = 0;
System.out.println(value);

  1. 字节类型表示的也是整数. 只占一个字节, 表示范围较小 ( -128 -> +127 )

  2. 字节类型和字符类型互不相干

7、短整型

short n = 10;
System.out.println(n);

  1. short 占用 2 个字节, 表示的数据范围是 -32768 -> +32767
  2. 这个表示范围比较小, 一般不推荐使用

8、布尔类型

boolean flag = true;
System.out.println(flag);

  1. boolean 类型的变量只有两种取值, true 表示真, false 表示假.
  2. Java 的 boolean 类型和 int 不能相互转换, 不存在 1 表示 true, 0 表示 false 这样的用 法。
  3. Boolean类型所占空间,JVM标准并没有定义。有的书写的是1个字节,有的书写的是1个bit位。

总结 :以上8种就是基本的数据类型。每个对应的包装类以及大小范围如下:

数据类型包装类所占空间(字节)取值范围
byteByte1-128 ~ 127
shortShort2-32768 ~ 32767
charCharacter20 ~ 65535
intInteger4-231 ~ 231 - 1
longLong8-263 ~ 263 - 1
floatFloat4-3.4E+38 ~ 3.4E+38
doubleDouble8-1.8E+308 ~ 1.8E+308
booleanBoolean未定义true、false

图中有6个黑色箭头,表示无信息丢失的转换; 另外3个红色箭头,表示可能有精度损失的转换。

9、字符串类型

String s = "I'm too handsome";
System.out.println(s); 
  1. Java 使用 双引号 + 若干字符 的方式表示字符串字面值.
  2. 和上面的类型不同, String 不是基本类型, 而是引用类型.
  3. 字符串中的一些特定的不太方便直接表示的字符需要进行转义

字符串类型与整形之间的转换:

//整形 -> 字符串
int n1 = 100;
String s1 = String.valueOf(n1); //需要转换成哪一类,就使用哪一类的包装类,包装类里有相应的方法
String s = String.parseInt(n1); //这个方法(函数) ,也可以转换

//字符串 -> 整形
String s2 = "2021";
int n2 = Integer.valueOf(s2);

字符串的+操作:

String s1 = "hello";
String s2 = "world";
String s3 = s1 + s2; //此时的加法,就是将s1和s2的字符串类型,拼接起来
System.out.println(s3);

除此之外,字符串还能直接和整数进行拼接,如下:

int a = 20;
int b = 30;
String s = "chongqing";

String res1 = a + b + s;
String res2 = s + a + b; //这两种输出,有区别吗?  

这个问题就留个大家,好好想想,why?

不可变字符串:

String s = "I love you";

String类没有提供修改字符串中某个字符的方法(函数), 如果希望将s字符串的内容进行修改为**“I love him”**,只能提取s字符串中的一些字符。

String str = s.substring(0, 6) + "him"; //提取“I love ”

上面这条语句,就将str赋值为了“I love him”;

由于不能修改Java字符串中的某个字符,所以在Java文档中将String类对象称为 不可变的。虽然你不能修改该字符串的某个字符,但是你可以修改s字符串,重新指向一个新的字符串。就如同,原先s字符串指向 “重庆”,你可以让它指向 “成都”。

问题:这样做,是否会降低运行效率?

答案:从不同的角度看: 1、单单从效率上来看,这样做确定时会影响效率,需要拼接一个新的字符串。 2、但是不可变字符串有一个优先:就是编译器可以共享这些字符串。

判断字符串是否相等:

首先我们先看看如下代码是否正确:

String str1 = "hello";
String str2 = "hello";
System.out.println(str1 == str2);       //true or false?
System.out.println(str1.equals(str2));  //true or false?

String str3 = "world";
System.out.println(str1 == str3);       //true or false?
System.out.println(str1.equals(str3));  //true or false?

先看str1 == str2; 两个字符串的内容都是“hello”,所以在Java中,这两个字符串是存储在字符串常量池, 在这个常量池,所以可以进行共享

字符串常量池: 字符串常量池的优点就是避免了相同内容的字符串的创建,节省了内存,省去了创建相同字符串的时间,同时提升了性能;另一方面,字符串池的缺点就是牺牲了JVM在常量池中遍历对象所需要的时间,不过其时间成本相比而言比较低。

所以str1和str2的引用,都是来自字符串常量池的同一块内存地址。直接判断str1 == str2,其实就是判断的引用是否相等。

下一个就是str1.equals(str2); equals方法,是用于判断两个字符串内容是否相等的,跟C语言中的strcmp函数,是一个意思。只不过equals方法返回的是布尔类型。

所以第2个print语句,输出的就是true;

最后面的两个print,想必大家已经知道为什么了吧。 我们就不在讲解了。

四、运算符

java中的运算符,和各大程序设计语言的运算符差不多,我们重点说一下几个点:

  1. 除法中。除数不能为0,不然会抛出算术异常

  2. 复合运算符:例如+=,有隐性强制类型转换,如下

    int a = 10;
    short b = 20;
    
    b += a;  
    b = (short)(a + b);  //这两个式子等价
    
  3. “>>” 与 ">>>"的区别: ">>“称为右移运算符,右边的丢弃,左边空出来的位置,需要补符号位。 而”>>>"称为无符号右移运算符,也就是说,用这个的话,左边补的不是符号位,而是补0。例如:

    int n = -1;
    System.out.println(n >> 1);
    System.out.println(n >>> 1); //这两个输出,有区别吗?
    

    肯定是有的,好好想一想哦!!!

  4. 同一级别的运算符按照从左到右的次序进行计算(但右结合运算符除外,如下表所示)。例如 && 比 || 的优先级要高,所以表达式

    a && b || c ,等价与于(a && b) || c。

    又比如: a += b += c ,也等价于 a += (b += c)。因为 += 运算符是右结合性。

运算符结合性
[] . () (方法调用)L -> R
! ~ ++ – + (一元运算) () (强制类型转换) newR -> L
* / %L -> R
+ -L -> R
<< >> >>>L -> R
< <= > >= instanceofL -> R
== !=L -> R
&L -> R
^L -> R
|L -> R
&&L -> R
||L -> R
? :R -> L
= += -+ *= /= %= &= |= <<= >>= >>>=R -> L

好啦,本期的更新就到此结束了!!!各位,下期见!!!

以上是关于初识java数据类型以及运算符(力作)的主要内容,如果未能解决你的问题,请参考以下文章

初识Java以及一些常见的数据类型

初识Java Java基础知识

初识java-变量,数据类型和运算符.2

Java初识方法

python修行之路(三 模块初识及数据运算类型)

java环境配置及初识java