Java赋值运算符
Java赋值运算符
给变量赋值似乎很简单;您只需将“=”右侧的内容分配给左侧的变量即可。下面的语句 1 将值 10 分配给变量 x,语句 2 创建名为 name 的 String 对象并为其分配值“Amit”。
Statement 1: x =10;
Statement 2: String name = new String ("Amit");
分配可以有多种类型。让我们详细讨论每一个。
原始赋值:
等号 (=) 用于为变量赋值。我们可以使用文字或表达式的结果来分配原始变量。
int x = 7; // literal assignment
int y = x + 2; // assignment with an expression
int z = x * y; // assignment with an expression with literal
原始铸造
通过强制转换,您可以将原始值从一种类型转换为另一种类型。当我们试图将较高精度的原语分配给较低精度的原语时,我们需要提供强制转换,例如,如果我们尝试将 int 变量(在 byte 变量的范围内)分配给 byte 变量,那么编译器将抛出一个名为“possible”的异常精度损失”。 Eclipse IDE 将建议解决方案,如下所示。为了避免这样的问题,我们应该使用类型转换来指示编译器进行类型转换。
byte v = (byte) a;
对于我们尝试将较小的容器变量分配给较大的容器变量的情况,我们不需要显式转换。编译器将处理这些类型转换。例如,我们可以将 byte 变量或 Short 变量分配给 int,而无需任何显式转换。
分配对于变量来说太大的文字
当我们尝试为原始变量分配太大(或超出范围)的变量值时,如果我们尝试提供显式强制转换,编译器将抛出异常“可能会丢失精度”,那么编译器将接受它但缩小范围使用二进制补码方法得到的值。让我们以具有 8 位存储空间和范围 -128 到 127 的字节为例。在下面的程序中,我们尝试将 129 文字值分配给字节原始类型,该类型超出了字节的范围,因此编译器将其转换为 -127使用二进制补码方法。请参阅二进制补码计算链接 (http://en.wikipedia.org/wiki/Two's_complement)
public class ExplicitCastingDemo {
public static void main(String[] args) {
byte b = (byte)129;
System.out.println("Value of b= " + b);
}
}
输出:
引用变量赋值
我们可以将新创建的对象分配给对象引用变量,如下所示
String s = new String(“Amit”);
Employee e = New Employee();
第一行将做以下事情,
创建一个名为 s 且类型为 String 的引用变量
在堆内存中创建一个新的 String 对象
将新创建的 String 对象分配给引用变量
您还可以将 null 分配给对象引用变量,这仅意味着该变量未引用任何对象。下面的语句为 Employee 引用变量(引用值的位持有者)创建空间,但不创建实际的 Employee 对象。
Employee a = null;
复合赋值运算符
有时我们需要修改相同的变量值并将其重新分配给相同的引用变量。 Java 允许您使用速记运算符组合赋值和加法运算符。例如,前面的语句可以写为:
i +=8; //This is same as i = i+8;
+= 称为加法赋值运算符。其他简写运算符如下表所示
Operator | Name | Example | Equivalent |
---|---|---|---|
+= | Addition assignment | i+=5; | i=i+5 |
-= | Subtraction assignment | j-=10; | j=j-10; |
*= | Multiplication assignment | k*=2; | k=k*2; |
/= | Division assignment | x/=10; | x=x/10; |
%= | Remainder assignment | a%=4; | a=a%4; |
下面是解释赋值运算符的示例程序:
public class AssignmentOperatorDemo {
public static void main(String[] args) {
//Literal Primitive Assignment
byte b = 25;
System.out.println("Primitive byte Assignment- "+ b);
//Assigning one primitive to another primitive
byte c =b;
System.out.println("Primitive byte Assignment from another byte variable- "+ c);
//Literal assignment based on arithmetic operation
int a = 23+b;
System.out.println("Primitive int Assignment from arithmetic operation- "+ a);
//Implicit Casting of variable x and y
short s = 45;
int x = b;
int y = s;
System.out.println("Implicit Casting of byte to int- "+ x);
System.out.println("Implicit Casting of short to int- "+ y);
//Short-Hand Assignment Operators
int i = 10;
i+=10;
System.out.println("Addition Oprator- "+ i);
i-=10;
System.out.println("Subtraction Oprator- "+ i);
i*=10;
System.out.println("Multiplication Operator- " + i);
i/=10;
System.out.println("Division Operator- " + i);
i%=3;
System.out.println("Reminder Operator- " + i);
}
}
输出:
概括
为 赋值可以直接进行,也可以进行强制转换。
如果我们分配的值超出了变量类型的范围,则分配 2 的补码。
Java 支持快捷方式/复合赋值运算符。
版权所属:SO JSON在线解析
原文地址:https://www.sojson.com/blog/524.html
转载时必须以链接形式注明原始出处及本声明。
如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。