数据类型 + 运算符

字符串数据类型

基本语法:

代码示例:

public static void main(String[] args) {
         String str = "hello";
         System.out.println(str);
     }

运行结果:hello

注意:

  1. 转义字符:

    转义字符 解释
    \n 换行
    \t 水平制表符
    \' 单引号
    \" 双引号
    \\ 反斜杠(一个)

    双引号打印示例:

    public static void main(String[] args) {
             String str = "\"hello\"";
             System.out.println(str);
         }

    运行结果:"hello"

字符串拼接:+

只要有一个字符串,那么整个就是一个字符串。

整型提升

  1. 如果小于4字节的数据类型进行运算时,先会提升为整型,在进行运算

    由于计算机的CPU通常是按照四个字节为单位从内存中读写数据,为了硬件上实行方便,这些会先提升为int,在计算;

  2. 当int和long混合运算的时候,int会提升为long,得到的结果任然是long类型;

代码示例:

 public static void main(String[] args) {
         int i = 2147483647 + 1;
         int i2 = Integer.MAX_VALUE + 1;
         System.out.println(i);
         System.out.println(i2);
     }

运行结果:

-2147483648

-2147483648

而byte就不一样,都会报错,

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

原因:对于byte来说,先会将=两侧的当做整型,若要运算:byte d = (byte)(b + c)-----------------------强制转换;或者int d = b + c;

变量

变量的作用域

也就是该变量能生效的范围,一般是变量定义所在的代码块(大括号)。

在方法里跟了一个小括号-------定义在方法内的一个代码块

   public static void main(String[] args) {
         {
            int i = 2147483647 + 1;
            System.out.println(i);
         }

变量的命名规则

硬性指标:

  1. 字母 下划线 数字 $ ;

  2. 但是不能以数字开头$、__可以开头,但规范上不建议

  3. 变量名大小写是不同的。

软性指标:

  1. 变量名要有描述性,见名知意;

  2. 不宜使用拼音,但不绝对;

  3. 推荐使用名词;

  4. 小驼峰命名法,出第一个单词外,其他单词首字母大写。

常量

是指运行时类型不能发生改变

字面常量

举例:10 “abc”(字符串常量) 1.0 ‘a'

final修饰的常量

代码示例:

public static void main(String[] args) {
         final int MAXNUM = 10;
         System.out.println(MAXNUM);
     }

运行结果:10

注意:

  1. 加了final之后就是一个常量,一般规定常量的变量名一般都大写;

  2. 若试图 MAXNUM = 999;错误 (原因: 常量只能被初始化一次,且使用的时候一定要记得初始化);

    但是如果:

     final int MAXNUM;
     MAXNUM = 999;

    就是对的。

类型转换

显式类型转换

把一个大类型给小类型 需要进行强制类型转换

代码示例:

 public static void main(String[] args) {
         long a = 10L;
         int b = a;
         System.out.println(b);
     }

运行结果:报错

这时就要强制转换(可能精度就会丢失):int b = (int)a;

隐式类型转换

把一个小类型数据给大类型

代码示例:

 public static void main(String[] args) {
         int a = 10;
         long b = a;
         System.out.println(b);
     }

运行结果:10

注意:

  1. int 和boolean类型不能相互转换;Boolean就是布尔类型 只有true和false,而int是数值类型;

  2. int给byte赋值,不能超过byte范围(-128~127);

int和string相互转换:

方法一:

 public static void main(String[] args) {
         int num = 10;
         String str1 = num + "";
         String str2 = String.valueOf(num);//调用字符串valueOf的方法
     }

运行结果:10

方法二:

 String str = "100";
 int num = Integer.parseInt(str);//调用Integer包装类parseInt方法

代码示例:

 public static void main(String[] args) {
         String str = "100";
         int num = Integer.parseInt(str);
         System.out.println(num);
     }

运行结果:100

但是(用不好):

 public static void main(String[] args) {
         String str = "100a";
         int num = Integer.parseInt(str);
         System.out.println(num);
     }

运行结果:(java中的异常)(原因: a不能转换成整型)

D:\javacode\20210919>java TestDemo
 Exception in thread "main" java.lang.NumberFormatException: For input string: "100a"
         at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
         at java.lang.Integer.parseInt(Integer.java:580)
         at java.lang.Integer.parseInt(Integer.java:615)
         at TestDemo.main(TestDemo.java:13)

运算符

算术运算符

基本四则运算符:+ - * / %

注意:

除法

  • 代码示例:

 public class TestDemo {
     public static void main(String[] args) {
         System.out.println(5/2);
         System.out.println(5.0/2);
         System.out.println((float)5/2);
         System.out.println((float)(5/2));
     }
 }

运行结果:

 2
 2.5
 2.5
 2.0
  • 代码示例:(不能除0

public class TestDemo {
     public static void main(String[] args) {
         System.out.println(5/0);
     }
 }

运行结果:(java异常------java.lang.ArithmeticException叫做算术异常

 Exception in thread "main" java.lang.ArithmeticException: / by zero
         at TestDemo.main(TestDemo.java:9)

取余

%表示不仅可以对int求模,也能对double求模 注意:

  • 10/-3 -10/3等情况 代码示例:

public static void main(String[] args) {
         System.out.println(10%3);
         System.out.println(-10%3);
         System.out.println(10%-3);
         System.out.println(-10%-3);
     }

运行结果:

 1
 -1
 1
 -1

第三个错误原因:10除以-3商-3 余数是1 ; 第四个错误原因: -10除以-3商3(和是一个正数)余数是-1

  • 小数可以求余数

增量赋值运算符(符合运算符)

有 += -= *= /= %=

例如:a+ = 10 ------------a = a+10;

自增自减运算符

有 ++ --

代码示例:

 int a = 10;
 int b = ++a;//a先加在赋值给b   a=11
 System.out.println(b);
 int c = a++;//先c = a a=11 ;  在a++   a=12
 System.out.println(c);//c=11

运行结果:

 11
 11

注意:(重点)

 public static void main(String[] args) {
         int i = 10;
         i = i++;
         System.out.println(i);
     }

运行结果: 10

原因:与C语言又不一样,java的反汇编指令(感兴趣了解)

关系运算符

主要有六个: ==(判断相等) !=(不等于) > < <= >=

关系运算符的表达式返回值都是boolean类型

代码示例:

         int a = 10;
         int b = 20;
         System.out.println(a == b);
         System.out.println(a != b);
         System.out.println(a < b);
         System.out.println(a > b);
         System.out.println(a <= b);
         System.out.println(a >= b);

运行结果:

 false
 true
 true
 false
 true
 false

逻辑运算符(重点)

主要有三个 : &&(且) || (或) !(非)

表达式返回值都是boolean类型

  • 逻辑与:表达式1 && 表达式2 (都为真表达式才成立)

    一旦表达式1为假,那么表达式2就不会执行了(短路求值)

    例如:

     System.out.println(10 > 20 && 10/0 == 0);

    运行结果:

    false (10/0会报错,为什么没有报错?-------10>20为假,后面的表达式2没有被执行)

  • 逻辑或:表达式1 || 表达式2 (其中一个真 就为真)

    一旦表达式1为真,那么就没有必要执行表达式2了 (短路或)

  • 逻辑非:!表达式1

             int a = 10;
             int b = 20;
             System.out.println(!a < b);

    运行结果:

     错误: 一元运算符 '!' 的操作数类型int错误
                     System.out.println(!a < b);//改正:System.out.println(!(a < b));

    原因:在Java中 非只能运行于布尔类型数据上,举例:

             boolean flg = true;
             System.out.println(!flg);

    运行结果:false

说明:

  1. &---------按位与(不为布尔类型时)

  2. | --------按位或(不为布尔类型时)

  3. ^ --------按位异或(不为布尔类型时) 异:不一样的

  4. ~ ---------按位取反(不为布尔类型时)

    如果操作数为布尔类型时,也表示逻辑运算。但是他们和&& || 相比,不支持短路求值

    例如:

     System.out.println(10 > 20 & 10/0 == 0);

    运行结果:程序异常

    • 如何就一个数字的二进制?

      十进制:123-----------1乘10^2 +2乘10^1 +3乘10^0

      而二进制由0 1组成,

      2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0
      128 64 32 16 8 4 2 1

      求10的二进制(8+2)----------(看成八位)0000 1010

      11-------0000 1011

      130-----1000 0010

      二进制转八进制 ----三个三个一起)(…010 000 010 -----0202(010----2(0开头代表八进制)

      二进制转十六进制 --四个四个一起( …1000 0010 --- 0x82(全0x00000082)(1000---8 0010---2)

      二转十六:1111----f, 10----a, 11-----b, 12----c ……

      • 按位与:0000 1011

        &0000 1101

        结果:0000 1001(不一样就是0)

      • 按位或:0000 1011

        | 0000 1101

        结果:0000 1111(有1就是1)

      • 按位异或:0000 1011

        ^ 0000 1101

        结果:0000 0110(一样的就是0,不一样再进行或)

      • 按位取反:~11 (11--------0000 1011)

        结果:1111 0100(取反的就好了)

移位运算符(了解)

有三个:<< >> >>>

都是按照二进制位来运算的

举例:11的二进制0000 1011

  1. 11>>1 11右移1位(右移以后,最高位(前面的)为几就补几 0000 0101 -----5

    右移相当于是除法 11/(2^1)=5 移2位就是 11/(2^2)=2

    -1>>1 1111 1111 右移一个 1111 1111(它本身)

    位运算的速度是大于 乘法 除法的,

  2. 11<<1 11左移1位(左移只补0 0001 0110 ------22)

    11<<2 0010 1100 -----44

    左移相当于乘法

  3. 无符号右移 >>> -1 ----1111 1111 >>>1 0111 1111(只补0)

  4. 没有无符号左移,没有意义

条件运算符

表达式1 ?表达式2 : 表达式3(三目运算符 是条件判断语句的简化写法)

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

运算符的优先级

乘除一定比加减高, 剩下的加括号

Guess you like

Origin blog.csdn.net/ccyzq/article/details/120728167