1、Java基础--运算和类型

本文详细介绍了Java中运算和类型的相关知识,包括计算两个整数的实数平均值(涉及双目数值提升)、造型运算符的使用、基本类型的缩小与放大转换规则、转义字符的应用,以及不同类型间的转换和运算规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

运算和类型

1、计算两个整数值的实数平均值(错误)

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner stdIn = new Scanner(System.in);

        System.out.println("计算整数值x和y的平均值。");
        System.out.print("x的值:");  int x = stdIn.nextInt();
        System.out.print("y的值:");  int y = stdIn.nextInt();
        double ave = (x + y) / 2;							// 平均值
        System.out.println("x和y的平均值为" + ave + "。");	// 显示
    }
}

输出:

原因:

在这样的运算中会默认执行被称为双目数值提升(binary numerical promotion)的类型转换。

在执行运符之前, int型操作数的值会先被提升为double型、int型的2会转换为double型的2.0,最终, 两个操作数都变成了double型, 因此a和b的运符结果都为double型。

双目数值提升的类型转换规则如下:

•    若有—个操作数为double型,则将另 —个操作数转换为double型
•    否则,若有一个操作数为float型,则将另 —个操作数转换为float型
•    否则,若有一个操作数为long型,则将另 —个操作数转换为long型
•    否则,将两个操作数都转换为int型

2、计算两个整数值的实数平均值

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner stdIn = new Scanner(System.in);
        System.out.println("计算整数值x和y的平均值。");
        System.out.print("x的值:");  int x = stdIn.nextInt();
        System.out.print("y的值:");  int y = stdIn.nextInt();
        double ave = (x + y) / 2.0;							// 平均值
        System.out.println("x和y的平均值为" + ave + "。");	// 显示
    }
}

输出:

最先执行的运算是用括号括起来的x+y。这是int+int, 运算结果也是int型。而作为除数的浮点型常址2.0是double型。

(x + y) / 2.0相当于int/ double,也可得到double型的结果。

3、造型运算符

计算两个整数值的实数平均值(使用造型运算符)

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner stdIn = new Scanner(System.in);
        System.out.println("计算整数值x和y的平均值。");
        System.out.print("x的值:");  int x = stdIn.nextInt();
        System.out.print("y的值:");  int y = stdIn.nextInt();
        double ave = (double)(x + y) / 2;					// 平均值
        System.out.println("x和y的平均值为" + ave + "。");	// 显示
    }
}

输出:

运算符/的左操作数表达式 (double) (x+ y)的通用格式:(类型)表达式--该表达式用来将表达式的值转换为指定类型的值

(int)5.7会舍弃double型的浮点型常量值5.7中小数点以后的部分,得到int型的5;

这里执行的类型转换称为造型(cast) 另外 , 括号并不是用来优先执行运符的符号(分隔符), 而是一种被称为造型运算符(cast operator)的运算符--(类型)x 得到将x转换为指定类型后的值。

4、基本类型的缩小转换

double型的值是不允许赋给int型的,(与被赋的值无关, 不管是10.0 还是10000000000.0 都不允许)向较小的类型赋值, 必须进行类型转换

基本类型的缩小转换:

• 从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的转换

只有常量表达式才可以无需造型就能赋值 如果是变量的话必须使用造型

short a =  l;    //正确
byte b = a;        //错误

对于float型变量,不可以不造型就赋入double型的常量值

float a = 3.14;    //错误,3.14是double型
float b = (float)3.14;    //正确
float c = 3.14f;        //正确,3.14f是float型

5、基本类型的放大转换

基本类型的放大转换:

• 从byte到short、int、long、fleoat、double的转换
• 从short到int、long、float、double的转换
• 从char到int、long、float、double的转换
• 从int到long、float、double的转换
• 从long到float、double的转换
• 从float到double的转换

放大转换在赋值或初期化时会自动执行,与缩小转换不同,放大转换并不需要造型

int a ='5';        //都正确
long b = a
double c = 3 .14f

从整型到浮点型的转换(丢失精度的示例)

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        int  a = 123456789;
        long b = 1234567890123456789L;
        System.out.println("        a = " +        a);
        System.out.println("(float) a = " + (float)a);
        System.out.println("        b = " +         b);
        System.out.println("(double)b = " + (double)b);
    }
}

输出:

在从int到float的转换过程和从long到double的转换过程中精度信息丢失了。

6、转义字符

转义字符:

 Unicode 转义:

1)\b…退格符:当输出退格符\b时, 当前显示位置会移动到该行中的前一个位置;

2)\f…换页符:当输出换页符\f时, 当前显示位詈会移动到下一逻辑页的页首;

3)\n …换行符:当输出换行符\n时, 当前显示位萱会移动到下一行的行首;

4)\r…回车符:当输出回车符\r时, 当前屈示位笸会移动到当前行的行首;

5)\t…水平制表符:当输出水平制表符\t时, 当前显示位置会移动到该行下—水平制表位置。 

输出水平制表符:

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        System.out.println("ABC\t123");
    }
}

输出:

转义字符\"和\'的使用示例:

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        System.out.println("关于字符串常量和字符常量。");
        System.out.println("用双引号括起来的\"ABC\"为字符串常量。");
        System.out.print("用单引号括起来的");
        System.out.print('\'');
        System.out.println("A'为字符常量。");
    }
}

输出:

7、总结

1) Java中可以使用的类型分为基本类型和引用类型;
2)基本类型分为数值类型和布尔型,数值类型义分为整型和浮点型;
3)类型不同, 表示数值的位也有所不同;
4)整型是表示一定范闱内连续的整数的类型,整型分为char型、byte型、short型、int型、long型;
5) char型以外的整型是表示负值、0 、正值的有符号整型。其内部通过补码表示的形式来表示;
6)整数常量是int型;L但如果加上整型后缀L或l, 就变成了long型。如果开头是0x或0X, 则为十六进制整数常量. 如果开头是0并且是2位以上, 则为八进制整数常量, 否则便为十进制整数常量;
7)浮点型由符号、指数、尾数构成,长度和精度存在一定限制;浮点型分为float型和double型;
8)浮点型常量是double型. 但如果加上整型后缀F或f, 就变成了float型,如果开头是0x或0X.,则为十六进制浮点型常量, 否则便为十进制浮点型常量;
9)如果使用浮点型变量来控制循环、就会累积误差,应该使用整型变量;

10)表示真或假的是布尔型(boolean型)表示真的布尔型常州为true, 表示假的布尔型常量为false;

11)当执行”字符串+ boolean 型值” 或者"boolean 型值+字符串" 的运算时, boolean型的值会先转换为"true" 或者'false" 字符串之后再进行拼接;

12)二元符术运符中会对操作数进行双目数值提升;

13)使用造型运算符()可以将操作数的值转换为任意类型的值;

14)基本类型的缩小转换中, 除了常量之外、原则上都必须进行显式类型转换而基本类型的放大转换会自动执行, 无需造型;

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner stdIn = new Scanner(System.in);
        System.out.println("15   / 2   = " + 15   / 2  );
        System.out.println("15.0 / 2.0 = " + 15.0 / 2.0);
        System.out.println("15.0 / 2   = " + 15.0 / 2  );
        System.out.println("15   / 2.0 = " + 15   / 2.0);
        System.out.print("变量x:"); int x = stdIn.nextInt();
        System.out.print("变量y:"); int y = stdIn.nextInt();
        boolean eq = (x == y);
        System.out.println("它们" + (eq ? "相等。" : "不相等。"));
        System.out.println("平均值为" +
                (double)(x + y) / 2 + "。");
        for (int i = 0; i <= 10; i++)
            System.out.printf("x = %6.5f\n", (float)i / 10);
        System.out.println("\"ABC\"为字符串常量。");
        for (int i = 0; i <= 3; i++) {
            for (int j = 0; j <= i; j++)
                System.out.print('\\');
            System.out.println();
        }
    }
}

输出:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值