java x%y_java中的运算符

本文详细介绍了Java中的各类运算符,包括算数运算符、赋值运算符、比较运算符、逻辑运算符、位运算符、三目运算符及扩展后的赋值运算符,并解释了它们的使用方法和优先级。

运算符是一种特殊的符号,用以表示数据的运算,赋值,比较等,java中有以下类型运算符

1.算数运算符

java支持所有的基本算术运算符,这里介绍7种基本算术运算符

+:加法运算符,字符串的连接符

-:减法运算符,求负运算符

*:乘法运算符

/:除法运算符

%:求余运算符

++:自加运算符

--: 自减运算符

自加和自减:

1)自加和自减都是弹幕运算符,只能操作一个操作数,只能操作单个数值型的变量,不能操作常量或表达式

2)运算符可以出现在操作数左边或右边,如果运算符出现在左边,则先把操作数自增或自减再放入表达式中运算

如果运算符出现在操作数右边,则先进行表达式运算再自增自减

注意点:

1)除法运算的两个特殊性。a.如果两个操作数都是整数类型,则计算结果也是整数,就是将自然除法的结果截断取  整,

例如15/4的结果是3,不是4。两个操作数都是整数类型,则除数不能为0,否则引发算数异常。

b.如果两个操作数有一个或两个是浮点数,结果为自然除法的浮点数。而且此时允许除数可以为0或0.0,结果为正无穷大或负无穷大

2)求余的运算结果不一定是整数,它的计算结果是整除结果剩下的值。因为求余运算也经过除法运算,遵循除法运算的第一个特殊性。

但是如果两个操作数有一个以上是浮点数,第二个数值为0或0.0时,求余的结果是非数NaN。0或0.0对非0的任何数求余将得到0或0.0;

public static voidmain(String[] args) {double a = 5.2;double b = 3.1;

System.out.println(a%b);

System.out.println("5对0.0的求余结果是:"+5%0.0);

System.out.println("0对5的求余结果是:"+0%5);

System.out.println("0对5的求余结果是:"+0%5);

System.out.println("0对0.0的求余结果是:"+0%0.0);//下面语句抛出异常//System.out.println("5对0的求余结果是:"+5%0);

int c = 5;int f = 5;int d = c+++3;int e = ++f+3;

System.out.println(c);

System.out.println(f);

System.out.println(d);

System.out.println(e);

c= -c;

System.out.println(c);

}

输出:

2.1

5对0.0的求余结果是:NaN

0对5的求余结果是:0

0对5的求余结果是:0

0对0.0的求余结果是:NaN

6

6

8

9

-6

2.赋值运算符

java中支持"="号作为运算符,其格式为: 装入的变量=直接量或变量,java支持连续赋值,但可读性低不推荐

3.比较运算符

比较运算符通常用于比较两个变量或常量的大小,返回的结果为布尔值true或false

>:大于号。比较运算符左右两边数值类型的变量或常量是否左边大于右边

>:小于号。比较运算符左右两边数值类型的变量或常量是否左边小于右边

>=:大于等于号。比较运算符左右两边数值类型的变量或常量是否左边大于或等于右边

<=:大于等于号。比较运算符左右两边数值类型的变量或常量是否左边小 于或等于右边

==:等于号。 可以比较数值类型,boolean类型和引用类型。只有两个引用类型具有父子关系时

才可以比较,且指向同一个对象时才返回true。比较数值类型时,只要数值相等就返回true,

例如‘a'==97返回true

4.逻辑运算符

逻辑运算符操作两个布尔型的变量或常量

&&:与。前后两个操作数返回true才返回true

&:不短路与。

||:或。前后两个操作数返回false才返回false

|:不短路或。

!:非。只有一个操作数。true的非操作为false,false的非操作为true

^:异或。操作数不同时返回true,相同时返回false

注意:对于&和&&的区别,都进行两个操作数的逻辑运算,当第一个操作数为false时,&&不会进行右边操作数的运算,

第二操作数被短路,但使用&仍然会执行第二个操作数的运算,第二个操作数不会被短路,但是最总返回的结果跟&&    一样。

|和||的区别解释同理

public static voidmain(String[] args) {

System.out.println("!false的结果是"+!false);

System.out.println(4>=5||'c'>'a');

System.out.println(4>=5^'c'>'a');int a = 97;int b = 36;if(a>54 || ++a>97){

System.out.println(a);//a得不到自加运算

if(b>24 | ++b>36){

System.out.println(b);//b得到自加运算

}

}

}

输出:

!false的结果是true

true

true

97

37

5.位运算符

java支持7个位运算符:&,|,~,^,<>,>>>。一般来说,位运算符只能操作整数类型的变量或值

位运算符,都是计算机底层补码操作

&:按位与,当两位同时为1时才返回1

|:只要有一位为1时就返回1

~:单目运算符,将操作数在计算机底层的二进制码的每个位全部取反

^:按位异或,当两位相同时时返回0,不同时返回1

<

>>:右移运算符,移位后以原符号位补充,也就是负数以1补充,正数以0补充

>>>:无符号右移运算符,移位后总是以0补充

进行移位运算遵循的规则

1)对于低于int类型(byte,char,short)的操作数,总是自动类型转换为int类型后在移位

2)对于int类型的整数移位a>>b,当b>32时,系统先将b对32求余(int类型数值32位),

得到的结果才是移动的位数,例如a>>33与a>1结果完全一致

3)对于long类型的整数移位a>>b,当b>>64时,也是移(b%64)位

4)对于<>移位,把操作数左移n位,其结果等于操作数乘以2的n次方,

右移n位的结果等于操作数除以2的n次方,移位不会改变操作数本身

public static voidmain(String[] args) {

System.out.println("5&9="+(5&9));

System.out.println("5|9="+(5|9));

System.out.println("~-5="+(~-5));

System.out.println("5^9="+(5^9));

System.out.println(5<<2);

System.out.println(-5<<2);

System.out.println(-5>>2);

System.out.println(-5>>>3);int a=6;int b=a>>3;

System.out.println(a+"右移3位后是"+b+",原操作数是"+a+",其本身并没有变");

}

输出:

5&9=1

5|9=13

~-5=4

5^9=12

20

-20

-2

536870911

6右移3位后是0,原操作数是6,其本身并没有变

6.三目运算符

三目运算符只有一个?:,语法格式如下:(expression)?if-true stament : if-false stament

int c=11;int d=12;

System.out.println(c>d?"c大于d":(c == d?"c等于d":"c小于d"));

输出:c小于d

7.扩展后的赋值运算符

赋值运算符可以跟算数运算符,移位运算符结合,扩展成为更强大的运算符。只要能使用这些扩展后的运算符,通常都推荐使用它们,不仅有更好的性能,而且程序更加健壮

+=:对于x+=y,相当于x=x+y;

-=:对于x-=y,相当于x=x-y;

*=:对于x*=y,相当于x=x*y;

/=:对于x/=y,相当于x=x/y;

%=:对于x%=y,相当于x=x%y;

&=:对于x&=y,相当于x=x&y;

|=:对于x|=y,相当于x=x|y;

^=:对于x^=y,相当于x=x^y;

<<=:对于x<<=y,相当于x=x<

>>=:对于x>>=y,相当于x=x>>y;

^=:对于x^=y,相当于x=x^y;

>>>=:对于x>>>=y,相当于x=x>>>y;

8.运算符优先级

941da755e64154fee4c0833a83eb0cc1.png

@echo off rem @echo %cd% rem @echo %~d0 rem @echo %~dp0 rem @echo %~df0 set MD_BOOT_HOME=%~dp0 set CONFIG_ROOT=%MD_BOOT_HOME%server\config\platform set LIBS_ROOT=%MD_BOOT_HOME%server\runtime rem set JAVA_HOME_PR=%~dp0jstack echo MD_BOOT_HOME: %MD_BOOT_HOME% echo %1 echo %2 set MD_BOOT_ARCH=%PROCESSOR_ARCHITECTURE% rem @echo %MD_BOOT_ARCH% set MD_BOOT_OS_KERNEL=win rem @echo %MD_BOOT_OS_KERNEL% @REM ==== START VALIDATION ==== if not "%JAVA_HOME%" == "" goto OkJHome echo. echo Error: JAVA_HOME not found in your environment. >&2 echo Please set the JAVA_HOME variable in your environment to match the >&2 echo location of your Java installation. >&2 echo. goto error :error set ERROR_CODE=1 @REM Set JAVA_HOME=%JAVA_HOME_PR%\runtime\java\%MD_BOOT_ARCH%-%MD_BOOT_OS_KERNEL% :OkJHome echo Checking java home: %JAVA_HOME% if exist "%JAVA_HOME%\bin\java.exe" goto doJob :doJob @setlocal enabledelayedexpansion for /r "%MD_BOOT_HOME%\" %%k in (lcm-metadata-shell*.jar) do ( @set MD_BOOTSTRAP="%%k" ) for /r "%MD_BOOT_HOME%\server\platform\" %%k in (*.jar) do set MAIN_JAR=%%k echo Checking MD bootstrap: %MD_BOOTSTRAP% echo "%JAVA_HOME%\bin\java" -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar %MD_BOOTSTRAP% %* "%JAVA_HOME%\bin\java" ^ -Dloader.path="%MD_BOOT_HOME%server\platform\common;%LIBS_ROOT%/libs;%LIBS_ROOT%/3rd" ^ -Dspring.config.additional-location="%CONFIG_ROOT%\common\;%CONFIG_ROOT%\dev\" ^ -Dspring.config.additional-location="%CONFIG_ROOT%\common\;%CONFIG_ROOT%\dev\" ^ -jar %MD_BOOTSTRAP% %* pause看看这些内容都正确加载了吗1)IDE功能所需jar:server\platform\dev\main 2)依赖的公共jar:server\platform\common 3)依赖的配置文件: a)server\config\platform\common b)server\config\platform\dev\ 4)依赖的caf jar:server\runtime\libs\ 5)依赖的第三方jar:server\runtime\3rd\
最新发布
03-08
<think>嗯,用户让我分析一个批处理脚本,并检查是否正确加载了指定的jar包和配置文件。我需要先仔细看看这个脚本的结构和各个部分的作用。 首先,用户提供的脚本看起来是用于启动Java应用程序的,设置了一些环境变量和路径。用户列出的需要检查的五个部分包括IDE功能所需的jar、公共jar、配置文件、caf jar和第三方jar。我需要逐一核对这些部分是否在脚本中被正确配置。 先看第一部分,IDE功能所需的jar在server\platform\dev\main下。脚本中有一个循环查找server\platform下的jar文件,设置MAIN_JAR变量。不过这里可能有问题,因为循环路径是%MD_BOOT_HOME%\server\platform\,而用户指定的是dev\main子目录。原脚本可能没有正确指向dev\main,导致MAIN_JAR可能没有加载到正确的jar。这可能需要调整路径。 接下来是公共jar,路径是server\platform\common。脚本中的-Dloader.path参数包含了%MD_BOOT_HOME%server\platform\common,这部分看起来是正确的,应该能加载common目录下的jar包。 配置文件部分,用户需要检查common和dev目录。脚本中设置了-Dspring.config.additional-location指向%CONFIG_ROOT%\common\和dev\,而CONFIG_ROOT是%MD_BOOT_HOME%server\config\platform,所以路径应该是正确的。不过注意到脚本中重复了两行相同的-Dspring.config.additional-location,这可能导致后面的覆盖前面的,但可能不影响,需要确认是否重复设置有问题。 然后是caf jar,路径在server\runtime\libs\。在-Dloader.path里,%LIBS_ROOT%/libs对应的是server\runtime\libs,所以没问题。同样,第三方jar在server\runtime\3rd,loader.path也包含这个路径,正确。 不过注意到在设置loader.path时,使用了分号分隔路径,但在批处理中可能需要转义分号或者使用正确的分隔符。需要检查路径是否正确拼接,比如%MD_BOOT_HOME%server\platform\common是否中间缺少反斜杠,可能因为变量MD_BOOT_HOME已经以反斜杠结尾,所以拼接正确。 另外,查找MAIN_JAR的部分,循环的是server\platform下的所有jar,而用户需要的是dev\main下的,这里路径可能不正确,导致MAIN_JAR可能指向了错误的jar文件。这需要调整循环的路径为server\platform\dev\main。 还有,MD_BOOTSTRAP变量是通过查找lcm-metadata-shell*.jar设置的,这部分是否正确?需要确认这个jar是否位于正确的位置,并且循环是否能找到它。可能没问题,但需要用户确认。 最后,检查错误处理部分,比如JAVA_HOME是否设置正确,是否存在java.exe。脚本中有检查JAVA_HOME的逻辑,如果未设置会报错,这部分看起来没问题。 总结问题点:MAIN_JAR的路径不正确,没有指向dev\main;-Dspring.config.additional-location重复设置;loader.path的路径分隔符是否正确;可能存在的路径拼接问题。需要逐一指出这些,并给出修正建议。</think>我将逐项分析脚本配置与需求的匹配情况,使用数学表达式$匹配度 \in [0,1]$进行量化评估: **1. IDE功能所需JAR(server\platform\dev\main)** ```batch for /r "%MD_BOOT_HOME%\server\platform\" %%k in (*.jar) do set MAIN_JAR=%%k ``` $\color{red}{匹配度=0.0}$ × 路径错误:当前遍历路径为`server\platform\`而非`server\platform\dev\main` ✓ 修正建议: ```batch for /r "%MD_BOOT_HOME%\server\platform\dev\main" %%k in (*.jar) do set MAIN_JAR=%%k ``` **2. 公共JAR(server\platform\common)** ```batch -Dloader.path="...;%MD_BOOT_HOME%server\platform\common;..." ``` $\color{green}{匹配度=1.0}$ ✓ 正确加载`common`目录 ⚠️ 注意路径拼接:建议改为`%MD_BOOT_HOME%\server\platform\common`(增加斜杠) **3. 配置文件** ```batch set CONFIG_ROOT=%MD_BOOT_HOME%server\config\platform -Dspring.config.additional-location="%CONFIG_ROOT%\common\;%CONFIG_ROOT%\dev\" ``` $\color{green}{匹配度=1.0}$(但存在优化空间) ✓ 正确加载: - a) common配置:`server\config\platform\common` - b) dev配置:`server\config\platform\dev` **4. CAF JAR(server\runtime\libs)** ```batch set LIBS_ROOT=%MD_BOOT_HOME%server\runtime -Dloader.path="...;%LIBS_ROOT%/libs;..." ``` $\color{green}{匹配度=1.0}$ ✓ 正确映射`server\runtime\libs` **5. 第三方JAR(server\runtime\3rd)** ```batch -Dloader.path="...;%LIBS_ROOT%/3rd" ``` $\color{green}{匹配度=1.0}$ ✓ 正确加载`server\runtime\3rd` **其他优化建议:** 1. 路径规范性问题: ```batch set MD_BOOT_HOME=%~dp0 # 已包含结尾反斜杠 set CONFIG_ROOT=%MD_BOOT_HOME%server\config\platform # 正确拼接 ``` 等效于: $$ \text{CONFIG\_ROOT} = \text{MD\_BOOT\_HOME} \oplus \text{"server\textbackslash config\textbackslash platform"} $$ 其中$\oplus$表示路径拼接运算符 2. 重复配置项: ```batch -Dspring.config.additional-location=... # 重复两行 ``` 建议合并为单行配置 3. 延迟变量扩展改进: ```batch @setlocal enabledelayedexpansion for /r ... ( @set MD_BOOTSTRAP="%%k" # 需要!var!语法读取动态值 ) ``` 最终验证结果矩阵: | 需求项 | 匹配度 | 状态 | |----------------------|--------|------| | IDE功能JAR | 0.0 | × | | 公共JAR | 1.0 | ✓ | | 配置文件 | 1.0 | ✓ | | CAF JAR | 1.0 | ✓ | | 第三方JAR | 1.0 | ✓ | 建议优先修正IDE功能JAR路径问题,其他配置项工作正常。修改后可通过`echo %MAIN_JAR%`验证路径是否正确。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值