0
点赞
收藏
分享

微信扫一扫

java-数据类型,运算符,数据类型转换

Gaaidou 2022-03-18 阅读 77
java

一、数据类型(基本数据类型和引用数据类型)

1.基本数据类型:

数据类型字节数位数范围
boolean(布尔类型)11true或者false
byte(字节型、整数型)18-2^{7}...2^{7}-1
short(短整型)216-2^{15}...2^{15}-1
char(字符型)2160...65535
int(整型)432-2^{31}...2^{31}-1
long(长整型)864-2^{63}...2^{63}-1
float(单浮点型)4323.4e-038...3.4e+038
double(双浮点型)8641.7e-308...1.7e+308

2.引用数据类型:数组、类、接口、枚举类型(enum)、注解类型(@interface)

3.定义变量及赋值

(1)定义:

int age;

char ch1;

String s;

(2)赋值:

age=12;

ch1='a';

s="hello";

4.整数类型

(1)不能超过范围

(2)进制:

0b或者0B开头:二进制

0开头:八进制

0x或者0X开头:十六进制

5.浮点型

(1)浮点型默认为double类型,若要用float型,在后面加上F或f。

float pi=3.14F;

6.字符型

(1)char c='a';

         char c1=97;

上面定义都正确

(2)char ch1=65;

         ch1++;

         System.out.println(ch1);//输出结果为  B

7.布尔型

(1)true和flase不代表非0数和0

8.字符串型

(1)字符串不是基本数据类型,而是引用数据类型

(2)一个字符串字面量不能分两行来写。若字符串太长,可以使用+连接。

二、运算符

1.算数运算符

(1)一元运算:正(+)、负(-)、自增(++)、自减(--)

(2)二元运算:加(+)、减(-)、乘(*)、除(/)、取余数(%)

(3)+ 还可用于字符串对象的连接

System.out.println("abc"+"def");//输出为  abcdef

int x=1,y=2;

System.out.println("abc"+x+y);//输出为   abc12

System.out.println(x+y+"abc");//输出为   3abc

(4)char y='b';//b的位置是98

若执行System.out.println(++y);//输出 c   

若执行System,out.println(y+1);//输出99

2.关系运算符

(1)>,>=,<,<=,==,!=

3.位运算符

(1)位逻辑运算:

~ 按位取反;&按位与;|按位或;^按位异或;

(2)移位运算:

<< 左移; >> 右移;>>> 无符号右移;

规则:左移右添0

           右移为正左添0

           右移为负左添1

           无符号右移左添0

(3)位运算符只能用于整型数据

(4)char类型进行位运算,自动转成int型

(5)位运算过程是二进制数运算

(6)位运算符也常用于改变数据,例如求2的4倍是多少等。

4.逻辑运算符

!逻辑非;&& 短路与;|| 短路或;& 逻辑与;|  逻辑或;^ 逻辑异或;

(1)运算对象和结果都是布尔型数据

(2)短路与非短路的区别:

短路与:若左边为false,结果为false,不再算右边

短路或:若左边为true,结果为true,不再算右边

其他情况及非短路都要将所有运算执行完

5.赋值运算符

(1)作用:为变量指定新的值

(2)赋值运算符(=):

格式:variableName=expression;

注意:左边变量必须能接受右边表达式的值。int j=3.14;  即是错误用法。

 (3)引用赋值:

Date d1=new Date();

Date d2=d1;

这里d1的地址赋给d2,d1和d2指向同一对象。

别名现象(aliasing):

class Number {
  int i;
}

public class Assignment {
  public static void main(String[] args) {
    Number n1 = new Number();
    Number n2 = new Number();
    n1.i = 9;
    n2.i = 47;
    System.out.println("1: n1.i: " + n1.i +
      ", n2.i: " + n2.i);
    n1 = n2;
    System.out.println("2: n1.i: " + n1.i +
      ", n2.i: " + n2.i);
    n1.i = 27;
    System.out.println("3: n1.i: " + n1.i +
      ", n2.i: " + n2.i);
  }
}


输出为:

1: n1.i: 9, n2.i: 47

2: n1.i: 47, n2.i: 47

3: n1.i: 27, n2.i: 27

class Letter {
  char c;
}

public class PassObject {
  static void f(Letter y) {
    y.c = 'z';
  }
  public static void main(String[] args) {
    Letter x = new Letter();
    x.c = 'a';
    System.out.println("1: x.c: " + x.c);
    f(x);
    System.out.println("2: x.c: " + x.c);
  }
}

输出为:

1: x.c: a

2: x.c: z

(4)扩展赋值运算符:
格式:variableName op = expression;

例如:a<<=b;等价于a=a<<b;

6.运算符的优先级

优先级运算符
1++,--,+(正),-(负),~,!,(cast)类型转换
2*,/,%
3+(加),-(减)
4<<,>>,>>>
5<,<=,>,>=,instanceof(实例运算符)
6==,!=
7&
8^
9

|

10&&
11

||

12?:
13=,+=,-=,*=,/=,%=

注意:小括号优先级最高(遇事不决小括号)。

三、数据类型转换

1.自动类型转换(加宽转换):

(1)定义:将具有较少位数的数据类型转换为具有较多位数的数据类型。

(2)包括:

byte->short,int,long,float,double

short->int,long,float,double

char->int,long,float,double

int->long,float,double

long->float,double

float->double

注意:int,long转float或者long转double可能发生信息丢失

(3)运算时,若两个操作数类型不同,会自动转换成更宽的类型

2.强制类型转换

(1)格式:a=(类型)b;

例如:

double d=15;

byte b=3;

b=(byte)d;

(2)强制类型转换可能会丢失信息

(3)包括:

short->byte,char

char->byte,short

int->byte,short,char

long->byte,short,char,int

float->byte,short,char,int,long

double->byte,short,char,int,long,float

(4)表达式中的自动提升

例如:
byte a=40;

byte b=50;

byte c;

c=a+b;//错误

c=(byte)a+b;//正确

因为在计算a+b时,会自动将a,b转成int类型,这时再赋给c,需要强制转换。

但是c=40+50;正确,因为常量表达式不会提升类型。

参考资料:

《Java语言程序设计》——清华大学出版社

《Java编程思想》——机械工业出版社

举报

相关推荐

0 条评论