数据类型,变量与运算符

目录

一、数据类型

二、变量

变量介绍

类型转换:

类型提升:

字符串类型:

int转为string:

string转为int:

三、运算符

算术运算符:

关系运算符:

逻辑运算符:

位运算符:

移位运算:

条件运算符:


一、数据类型

       在java中,数据类型主要分为两类:基本数据类型引用数据类型。

       基本数据类型主要分为四类八种:

       1.四类:整型,浮点型,字符型,布尔型。

       2.八种:

         

 引用数据类型主要包括类、接口、数组。

比如我们熟知的类有string类(字符串类型)。

二、变量

变量介绍

区别于一般常量和字面常量,对于经常需要改变的内容,在java程序中成为变量,而数据类型就是用来定义不同类型的变量的。

语法格式: 数据类型  变量名=初始值;

eg:int a=10;    double b=3.5;   char c='F';   boolean  d=true;

    在java程序中,整型数字会默认为int型,小数会默认为double型,因此,特别的,当我们单独定义long型和float型变量时:long a=100;会报错或者报警告,应该写为long a=100l;或long a=100L;

同样的float b=3.0;也应该改为float b=3.0f;(或float b=3.0F;)。

 另外常见的错误还包括:使用前为赋值,赋值超过类型表示范围。

eg:int a;

       System.Out.println(a);

       int d=326646262666;

       System.Out.println(d);

布尔类型:

       布尔类型作为一种特殊的数据类型,可取值仅仅为true和false两种。不同于C语言,布尔类型的变量因为不存在0为false,非0为true的说法,其类型也不能与int等其他类型之间相互做类型转换。

类型转换

        在java中,当参与运算数据类型不一致时,就会进行类型转换,java中的类型转换主要分为两类:自动类型转换和(隐式)强制类型转换(显式)

自动类型转换(隐式):代码不需要任何处理,在代码编译时,编译器会自动进行处理(范围小的类型会自动转换为范围较大的类型)。

int a=100;
long b=10L;
b=a;//long的范围比int范围大,编译时会自动将int型的a变量提升为long型后赋值给b;
a=b;//编译会报错,因为将long型的b赋值给范围较小的int型的a时可能会丢失数据,不安全。
float a=10.6f;
double b=3.4;
b=a;//编辑器会自动将float型的a变量提升为double型后赋值给b;
a=b;//编译时会报错,因为double型的b赋值给范围较小的float型的a时,可能会丢失数据,不安全;

 强制类型转换(显式):当进行操作时,代码需要进行一定的格式处理,不能自动完成(范围大的类型转换为范围较小的类型)。

int a=100;
long b=10L;
b=a;//同上,为自动类型转换(隐式)
a=(int)b;//范围由大(long型)到小(int型)为强制类型转换(显式),这样编译不会报错

 

float a=10.6f;
double b=3.4;
b=a;//同上,为自动类型转换(隐式);
a=(float)b;//范围由大(double型)到小(float型),为强制类型转换(显式),否则会报错;

类型提升:

     不同类型的数据之间进行运算时,数据类型小的会被提升为数据类型大的。

int a=10;
long b=20L;
int c=a+b;//int+long==>long+long赋值给int型的C变量时,会因为丢失数据而报错。
long d=a+b//编译成功
byte a=10;
byte b=20;
byte c=a+b;
System.out.println(c);//编译错误:不兼容的类型,从int转换为byte可能有损失;

虽然a和b都是byte,但编译器在编译a+b操作时,会先将a和b都提升为int型,再进行计算,得到的结果也为int,因此会有损失(字节低于4个字节的类型:short和byte都会先提升为int,再参与运算)。

正确的写法:

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

补充:java中数据类型大小排序:byte<short<char<int<long<float<double

字符串类型:

public class TestDemo {
    public static void main(String[] args) {
        String s1="hello";
        String s2="world";
        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s1+s2);
    }
}

输出结果为:hello

                      world

                      helloworld

int转为string:

public class TestDemo {
    public static void main(String[] args) {
      int n=10;
      String s1=n+"";//方法一
      String s2=String.valueOf(n);//方法二
      System.out.println(s1);
      System.out.println(s2);
    }
}

string转为int:

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

三、运算符

   java中运算符分为:算术运算符(+ - * /),关系运算符,逻辑运算符,位运算符,移位运算符以及条件运算符等。

算术运算符:

1.int/int时如果算出小数,要向下取整

2.做除法和取模运算时,右操作符不能为0,否则会报错

3.不同于c语言,java中不仅可以对int型进行取模运算,还可以对double型进行取模运算

 System.out.println(11.5%2.0);// 1.5

但没有意义,一般还是对int型进行取模运算

4.数据类型不一致时进行运算,会向类型大的提升

关系运算符:

  关系运算符(== < > != <= >=)的计算结果都是true或者false,区别于C语言的1和0

逻辑运算符:

  短路求值

System.out.println(10/0==0);//因为0为右操作符,所以编译会报错
System.out.println(20>10||10/0==0);//true
System.out.println(20<10&&10/0==0);//flase

对于||运算符,只要左侧表达式为真,整体输出就为真,不会运行右侧表达式

对于&&运算符,只要左侧表达式为假,整体输出就为假,不会运行右侧表达式

因此,即使右侧表达式编译会报错,也能正常运行整个代码。

位运算符:

 单目运算符: ~(按位取反)(二进制每位取反  0变1, 1变0)

 双目运算符: &(按位与)    (二进制对应位进行与运算)

                     | (按位或)  (二进制对应位进行或运算)

                     ^(按位异或)(二进制对应位 相同为0相异为1)

移位运算:

   1.左移  <<:左侧不要,右侧补0,因此运算后可能由正数变负数

   2. 右移 >>:右侧不要,最左侧符号位正数补0,负数补1

   3.无符号右移 >>>: 右侧不要,最左侧补0

条件运算符:

  表达式1?表达式2:表达式3

  如果表达式1为真,整体输出结果为表达式2的结果;如果表达式1为假,整体输出结果为表达式3的结果。

  int a=10;
  int b=20;
  System.out.println(a>b?a:b);//输出结果为20

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值