Java教程

Java数据类型以及运算符

本文主要是介绍Java数据类型以及运算符,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

语法基础

  • 数据类型
    • 一图流概括Java的数据类型
    • 数据使用时的注意事项
    • 字符串类型变量
      • 转义字符的考察
    • 变量的命名规则
    • 字面值常量
    • 数据类型之间的转换
    • 使用强制类型转换
      • 数值提升
      • int和string的相互转换
  • 运算符
    • 算术运算符+ - * / %
    • 关系运算符== != < > <= >=
    • 逻辑运算符&& || !
    • 位运算符& | ~ ^
    • 移位运算符<< >> >>>
    • 条件运算符 表达式1 ? 表达式2 : 表达式3
  • 给定一个十进制整数, 如何转成二进制形式? 如何转成十六进制形式?

数据类型

一图流概括Java的数据类型

数据类型包装类大小位数范围默认值
intInteger4byte32位-231~231-10
shortShort2byte16位-215(-32768)~215-10
longLong8byte64位-263~263-10
floatFloat4byte32位3.4e-45~1.4e380.0
doubleDouble8byte64位4.9e-324~1.8e3080.0
charCharacter2byte16位存储Unicode码,用单引号赋值
byteByte1byte8位-128~1270
booleanBooleantrue、falsefalse

数据使用时的注意事项

1、局部变量在使用的时候字面值是一定不能超过范围的
2、long,float,double在使用时要分别在后面加上l,f,d,比如:

long num = 10l;//也可写作10L
double num = 1.0d;//也可以不写
float num = 1.0f;//也可写作10F

3、计算机中的字符本质上是一个整数. 在 C 语言中使用 ASCII 表示字符, 而 Java 中使用 Unicode 表示字符. 因此一个字符(Unicode)占用两个字节, 表示的字符种类更多, 包括中文

字符串类型变量

把一些字符放在一起就构成了字符串变量
先来看两个字符串的代码:

public static void main(String[] args) {
        String str = "wangzhenyu love lishilin!";//引用变量string
        System.out.println(str);//但是存的也是地址

        int a=10;
        System.out.println("a = " + a);
        int b=10;
        System.out.println("hello " + a + b);//只拼接不算
        System.out.println(a+b+"haha");//先运算再拼接

        String str2 = "hello \"张三\"";
        System.out.println(str2);
    }

这个代码包含的意义就很多了,首先第一个wangzhenyu love lihsilin!这样一个字符串只是将字符串的地址放到str中,打印时也只是访问了str的地址。
第二个字符串拼接的时候,中间要加+,第一个是a=10,字符串+整数时,整数之间放上去不进行计算,所以时hello1010,整数+字符串时要先计算整数在添上字符串,20hello
第三个也是字符串中转义的考察,可以看到\将"转义了,那么就输出",所以结果就是hello"张三"

    public static void main(String[] args) {
        String str1 = "hello ";
        String str2 = "abc";
        String str3 = str1+str2;
        System.out.println(str3);
    }

这个比较简单,字符串加字符串直接加号就行

转义字符的考察

我想通过三个列子应该就能对转义字符\有更深的了解吧

System.out.println("\\\"hello\\\"");
System.out.println("\\"hello\\"");
System.out.println("/\"hello/\"");

首先是第一个:\先转义第二个\,打印出\,第三个\转义出",打印出”,后面也是一个\转义,转义出另一个特殊字符打印出来,最后的结果是
“hello”
读者可以自行做下后两个,答案分别是
错误编译(有前"没有后")
/“hello/”

变量的命名规则

1、见名知意
2、驼峰命名
a.变量的定义要采用小驼峰的形式bigNum
b.类名,接口要用大驼峰的形式BigNum

字面值常量

10int 字面值常量(十进制)
010int 字面值常量(八进制) 由数字 0 开头. 010 也就是十进制的 8
0x10int 字面值常量(十六进制) 由数字 0x 开头. 0x10 也就是十进制的 16
10Llong 字面值常量. 也可以写作 10l (小写的L)
1.0double 字面值常量. 也可以写作 1.0d 或者 1.0D
1.5e2double 字面值常量. 科学计数法表示. 相当于 1.5 * 10^2
1.0ffloat 字面值常量, 也可以写作 1.0F
trueboolen 字面值常量, 同样的还有 false
‘a’char 字面值常量, 单引号中只能有一个字符
“abc”String 字面值常量, 双引号中可以有多个字符.

数据类型之间的转换

int a = 10; 
long b = 20; 
a = b; // 编译出错, 提示可能会损失精度. 
b = a; // 编译通过. 
int a = 10; 
double b = 1.0; 
a = b; // 编译出错, 提示可能会损失精度. 
b = a; // 编译通过.

long 表示的范围更大, 可以将 int 赋值给 long, 但是不能将 long 赋值给 int.
double 表示的范围更大, 可以将 int 赋值给 double, 但是不能将 double 赋值给 int.
即范围较小的能隐式转换成范围较大的类型,反之不行
int和boolean类型不能相互转换,因为boolean类型就只有true和false两种

使用强制类型转换

int a = 0; 
double b = 10.5; 
a = (int)b; 
int a = 10; 
boolean b = false; 
b = (boolean)a; // 编译出错, 提示不兼容的类型

使用强制类型可以将double强制转为int刑,但精度会丢失,10.5会变为10

数值提升

int a = 10; 
long b = 20; 
int c = a + b; // 编译出错, 提示将 long 转成 int 会丢失精度
long d = a + b; // 编译通过

当int和long混合运算时,int会提升为long类型,计算结果就是long类型,所以直接放到int型是不合适的,精度缺失,只能用long类型来接收
byte和byte的计算

byte a = 10; 
byte b = 20; 
byte c = a + b; 
System.out.println(c);

虽然a和b都是byte类型,但是计算机在计算的时候会首先将它们转成int型,最后得到的结果也是int类型的,放到byte类型中是不行的
所以改法就是类型转换成byte类型

byte c = (byte)(a + b);

1、不同类型的数据混合运算, 范围小的会提升成范围大的
2、对于 short, byte 这种比 4 个字节小的类型, 会先提升成 4 个字节的 int , 再运算

int和string的相互转换

public static void main(String[] args) {
        //int转成string
        int num = 10;
        // 方法1
        String str1 = num + "";
        // 方法2
        String str2 = String.valueOf(num);
        System.out.println(str1);
        System.out.println(str2);
        System.out.println("-------------------");
        //string转成int
        String str = "100";
        int NUM = Integer.parseInt(str);
        System.out.println(NUM);
    }

直接就能转换,yysy这是真的比C好用

运算符

算术运算符+ - * / %

值得注意的是double型现在也能取余操作了

System.out.println(11.5 % 2.0);

运算结果是1.5

关系运算符== != < > <= >=

返回值都是boolean类型,即只有true or false

逻辑运算符&& || !

对于 && , 如果左侧表达式值为 false, 则表达式的整体的值一定是 false, 无需计算右侧表达式
对于 ||, 如果左侧表达式值为 true, 则表达式的整体的值一定是 true, 无需计算右侧表达式(都遵守短路运算法则)

位运算符& | ~ ^

按位与 &: 如果两个二进制位都是 1, 则结果为 1, 否则结果为 0
按位或 |: 如果两个二进制位都是 0, 则结果为 0, 否则结果为 1
值得注意的是: 当 & 和 | 的操作数为整数(int, short, long, byte) 的时候, 表示按位运算, 当操作数为 boolean 的时候, 表示逻辑运算
按位取反 ~: 如果该位为 0 则转为 1, 如果该位为 1 则转为 0

public static void main(String[] args) {
        int a = 0xf;
        System.out.printf("%x\n", ~a);
    }

比如这个代码结果是fffffff0
按位异或 ^: 如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1

移位运算符<< >> >>>

左移 <<: 最左侧位不要了, 最右侧补 0
右移 >>: 最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)
无符号右移 >>>: 最右侧位不要了, 最左侧补 0
值得注意的是:

  1. 左移 1 位, 相当于原数字 * 2. 左移 N 位, 相当于原数字 * 2 的N次方.
  2. 右移 1 位, 相当于原数字 / 2. 右移 N 位, 相当于原数字 / 2 的N次方.
  3. 由于计算机计算移位效率高于计算乘除, 当某个代码正好乘除 2 的N次方的时候可以用移位运算代替.

条件运算符 表达式1 ? 表达式2 : 表达式3

当 表达式1 的值为 true 时, 整个表达式的值为 表达式2 的值; 当 表达式1 的值为 false 时, 整个表达式的值为 表达式3 的值

给定一个十进制整数, 如何转成二进制形式? 如何转成十六进制形式?

十进制数转化为二进制
不断除以2就行,最后余数只剩或者1,再把余数倒序排列

同理转化为十六进制也是同样的道理
十进制数转化为十六进制
和十转二进制相似,把要转换的数,除以16,得到商和余数,将商继续除以16,直到商为0。最后将所有余数倒序排列,得到数就是转换结果。

10~15为ABCDEF

这篇关于Java数据类型以及运算符的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!