-
2021-02-26 09:38:08
运行下面这段代码,其结果是什么?
package com.test;
public class Example {
String str = new String("good");
char[] ch = { 'a', 'b', 'c' };
public static void main(String[] args) {
Example ex = new Example();
ex.change(ex.str, ex.ch);
System.out.println(ex.str);
System.out.println(ex.ch);
}
public void change(String str, char ch[]) {
str = "test ok";
ch[0] = 'g';
}
}
结果如下:
good
gbc
解说:
java 中String是 immutable的,也就是不可变,一旦初始化,其引用指向的内容是不可变的(注意:是内容不可变)。
也就是说,假设代码中有String str = “aa”;str=“bb”;,则第二条语句不是改变“aa”原来所在存储地址中的内容,而是另外开辟了一个空间用来存储“bb”;同时由于str原来指向的“aa”现在已经不可达,jvm会通过GC自动回收。
在方法调用时,String类型和数组属于引用传递,在上述代码中,str作为参数传进change(String str, char ch[]) 方法,方法参数str指向了类中str指向的字符串,但str= "test ok"; 语句使得方法参数str指向了新分配的地址,该地址存储“test ok”,而原来的str仍然指向“good”。对于数组而言,在change方法中,方法参数ch指向了类中ch指向的数组,ch[0] = 'g';语句改变了类中ch指向的数组的内容
我们再来看下面这段代码,它的运行结果是什么?
package com.test;
public class Example {
String str = new String("good");
char[] ch = { 'a', 'b', 'c' };
public static void main(String[] args) {
Example ex = new Example();
ex.change(ex.str, ex.ch);
System.out.println(ex.str);
System.out.println(ex.ch);
}
public void change(String str, char ch[]) {
str = str.toUpperCase();
ch = new char[]{ 'm', 'n' };
}
}
结果如下:
good
abc
有了前面的解释,这个结果是不是在意料之中?!
以上这篇java中String类型变量的赋值问题介绍就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
更多相关内容 -
Java中被____修饰的变量称为常量,它只能被赋值一次,并且一旦被赋值,其值不能改变。
2021-03-08 20:33:02【判断题】final关键字不可以修饰成员变量。...( )【判断题】被final修饰的类不能被继承。( )【多选题】final可以修饰如下哪些内容()【简答题】统计数据的分类【简答题】电梯四大空间是什么?【判断题】当一个类的...【判断题】final关键字不可以修饰成员变量。( )
【简答题】LTE的中文意思是?
【单选题】下面对于final修饰方法的描述中,正确的是()
【单选题】下列关于会阴深隙通过结构描述正确的是()
【判断题】final可以修饰局部变量。( )
【判断题】被final修饰的类不能被继承。( )
【多选题】final可以修饰如下哪些内容()
【简答题】统计数据的分类
【简答题】电梯四大空间是什么?
【判断题】当一个类的方法被final关键字修饰后,这个类的子类将不能重写该方法。( )
【简答题】MIMO中文意思是?
【简答题】LTE的关键技术有哪些?
【填空题】final修饰的局部变量只能被赋值____(大写)次。
【单选题】当地大气压为745mmHg测得一容器内的绝对压强为350mmHg,则真空度为( )
【单选题】下列集合中,不是集合{1,2,3}真子集的是
【判断题】Young people visit older family menbers and kids are bkessed with a red pack of "lucky" money.
【单选题】自然式整形的灌木,树冠应距离地面( ),露出部分枝干。
【填空题】Java中被____修饰的变量称为常量,它只能被赋值一次,并且一旦被赋值,其值不能改变。
【单选题】关于电场 , 下列说法正确的是 ( )
【单选题】下列单位换算不正确的一项是( )
【单选题】压强表上的读数表示被测流体的绝对压强比大气压强高出的数值,称为( )
【单选题】自然式整形的灌木,要及时清除树冠内的( ),提高观赏效果
【单选题】下列选项中,哪个不能被final修饰( )
【判断题】Java中的类被final关键字修饰后,该类将不可以被继承。( )
【单选题】某设备进、出口测压仪表中的读数分别为 P 1 (表压) =1200mmHg ( 1mmHg=133.322Pa )和 P 2 (真空度) =700mmHg ,当地大气压为 750mmHg ,则两处的绝对压力差为( ) mmHg 。
【单选题】自然式整形的灌木,要保留一定数量的( ),疏除多余分枝。
【单选题】分析下面程序,哪一行代码能正确赋值() class Demo { public void method() { final int num1 = 10; static int num2 = 20; abstract int num3 = 30; private int num4 = 40; } }
【单选题】下列选项中,可以被final修饰符修饰的是()
【单选题】早春开花的灌木,如榆叶梅、碧桃等,应在 ( )修剪,可调整树形和花枝量 。
【判断题】final可以在方法中修饰基本数据类型变量,但是不可以修饰引用数据类型变量。( )
【判断题】我们可以使用final关键字修饰抽象方法。( )
【单选题】final修饰符修饰方法时,不能和以下哪个修饰符共用()
【单选题】下面对于final的描述中,错误的是()
【填空题】____关键字可用于修饰类、变量和方法,它有“这是无法改变的”或者“最终”的含义。
【判断题】Spring Festival is the most important festival for the Chinese people,which falls the 1st day of the 1st lunar month.
【判断题】final即可以修饰局部变量也可以修饰成员变量。( )
【论述题】新零售的概念内涵是什么?它对传统零售行业和零售管理的影响是什么?
【单选题】下列选项中,不可以被final修饰的是( )
【单选题】关于final修饰成员变量说法正确的是()
【单选题】下列选项中,关于final修饰成员变量的说法正确的是( )
【单选题】请定义一个由public修饰符修饰的int型成员变量MAX_LENGTH,并使该值保持为常数100,则定义这个变量的语句是()
【单选题】UMTS是第几代移动通信?
【单选题】下列关于会阴浅隙描述正确的是()
【单选题】在院前急救中,属于经常性任务的是
【判断题】final修饰的成员变量可以在构造方法中对其重新赋值。( )
【单选题】某企业本月在其他条件都不变的情况下,采购成本降低了1%,而利润却增长了12%,请问:这是什么以下哪个方面所起的作用?
【判断题】final修饰的静态方法可以被类名直接调用。( )
【单选题】通过采购渠道观察市场供求变化及其发展趋势,借以引导企业投资方向,这是采购与供应管理的哪个作用?
【单选题】下列选项中,哪个关键字可以修饰方法内的局部变量?()
【单选题】夏季开花的灌木,如 珍珠梅 、石榴、 木槿 夹等,要在 ( )修剪,选留壮枝壮芽抽枝开花 。
-
java 中 String 数组怎么动态赋值
2021-02-12 15:18:17展开全部首先明确一下数组的初始62616964757a686964616fe4b893e5b19e31333337626264化://静态初始化inta[]={1,2,3};//动态初始化inta[];a=newint[3];...JAVA是强类型,数组类型一旦声明,就不能更改...展开全部
首先明确一下数组的初始62616964757a686964616fe4b893e5b19e31333337626264化://静态初始化
int a[]={1,2,3};
//动态初始化
int a[]; a = new int[3] ; a[0] = 1;a[1] = 2;a[2]=3;
//默认初始化
int a [] = new int [5] ;
JAVA是强类型,数组类型一旦声明,就不能更改了;
如果数组长度确定,我想所谓的“动态赋值”用循环应该可以搞定;
如果数组的长度是不确定的,我认为你这个提问才有点价值,因为这需要根据具体情况来改变数组的长度,告诉你java是怎么干的,用的 System.arraycopy, jdk 里好多操作数组的源码都是用的这个,比如 ArrayList的实现
闲着没事写了个小例子玩玩:
import java.util.Random;
import java.util.Scanner;
/**
*
* @author LYTG
* @since 2015-12-29 上午12:21:09
*/
public class DemoTest {
/**
* @author LYTG
* @param args
*/
public static void main(String[] args) {
test2();
}
/**
* @author LYTG
* @param array
*/
public static void out(String[] array){
if(array==null){
System.out.println("null");
return;
}
if(array.length<1){
System.out.println("{ }");
return;
}
StringBuffer sb = new StringBuffer();
sb.append("{\"");
sb.append(array[0]);
sb.append("\"");
for(int i = 1; i
sb.append(",\"");
sb.append(array[i]);
sb.append("\"");
}
sb.append("}");
System.out.println(sb.toString());
}
/**
* 声明一个长度为5的String类型数组,并为每个数组元素赋值一个随机整数
* @author LYTG
*/
public static void test1(){
String[] array = new String[5];
for(int i = 0; i
array[i] = String.valueOf(new Random().nextInt());
}
out(array);
}
/**
* 在控制台输入字符,把每次输入的字符保存到一个数组中,
* 如果输入的字符串中包含空格,则切割后再分别保存到此数组中,
* 在每次输入完成后输出整个数组,直到手动终止程序
* @author LYTG
*/
private static String[] array = new String[0];
public static void test2(){
Scanner sc = new Scanner(System.in);
System.out.println("请输入一串字符(输入完请敲回车):");
String input = sc.nextLine();
if(input.contains(" ")){
String[] a = input.split(" ");
int arrayLength = array.length;
int aLength = a.length;
String[] newArray = new String[arrayLength + aLength];
System.arraycopy(array, 0, newArray, 0, arrayLength);
System.arraycopy(a, 0, newArray, arrayLength, aLength);
array = newArray;
}else{
int arrayLength = array.length;
String[] newArray = new String[arrayLength + 1];
System.arraycopy(array, 0, newArray, 0, arrayLength);
newArray[arrayLength] = input;
array = newArray;
}
out(array);
test2();
}
}
-
Java中的变量赋值和参数传递
2019-04-01 15:14:10Java中的数据类型分为两种:基本数据类型和引用数据类型。 ①基本数据类型: byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 short:短整型,在内存中占16位,即2...一、数据类型
Java中的数据类型分为两种:基本数据类型和引用数据类型。
①基本数据类型:
byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0
short:短整型,在内存中占16位,即2个字节,取值范围-32768~32717,默认值0
int:整型,用于存储整数,在内在中占32位,即4个字节,取值范围-2147483648~2147483647,默认值0
long:长整型,在内存中占64位,即8个字节-263~263-1,默认值0L
float:浮点型,在内存中占32位,即4个字节,用于存储带小数点的数字(与double的区别在于float类型有效小数点只有6~7位),默认值0
double:双精度浮点型,用于存储带有小数点的数字,在内存中占64位,即8个字节,默认值0
char:字符型,用于存储单个字符,占16位,即2个字节,取值范围0~65535,默认值为空
boolean:布尔类型,占1个字节,用于判断真或假(仅有两个值,即true、false),默认值false
②引用数据类型:
Java中的引用数据类型包括:类、接口、数组。
在Java中,引用类型的变量非常类似于C/C++的指针。引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时被指定为一个特定的类型。变量一旦声明后,类型就不能被改变了。
换句话说:Java语言本身不支持C++中的结构(struct)或联合(union)数据类型,它的复合数据类型一般都是通过类或接口进行构造,类提供了捆绑数据和方法的方式,同时可以针对程序外部进行信息隐藏。
二、数据在内存中的存储
(1)基本数据类型的存储原理:所有的简单数据类型不存在“引用”的概念,基本数据类型都是直接存储在内存中的内存栈上的,数据本身的值就是存储在栈空间里面,而Java语言里面八种数据类型是这种存储模型;
(2)引用类型的存储原理:引用类型继承于Object类(也是引用类型)都是按照Java里面存储对象的内存模型来进行数据存储的,使用Java内存堆和内存栈来进行这种类型的数据存储,简单地讲,“引用”是存储在有序的内存栈上的,而对象本身的值存储在内存堆上的;
区别:基本数据类型和引用类型的区别主要在于基本数据类型是分配在栈上的,而引用类型是分配在堆上的
三、变量赋值与参数传递int i = 5; //定义整数 /* * 1、在栈中定义一个整数变量i * 2、将5赋值给i */
User u = new User(); //创建对象 /* * 1、定义一个User类型的变量u(User u),栈中。 * 2、new : 创建对象,堆中。 * 3、User():构造方法,给属性初始化 * 4、 = 将对象的地址(能找到对象的依据)赋给变量 */
参考资料:
https://blog.csdn.net/zhuiwenwen/article/details/12351565
https://www.cnblogs.com/9513-/p/8484071.html
https://www.cnblogs.com/studyLog-share/p/5307913.html -
Java中被final修饰的变量的几种赋值方式
2020-09-25 09:32:52final 表示"最后的、最终的"含义,变量一旦赋值后,不能被重新赋值。被 final 修饰的实例变量必须显式指定初始值。 final 修饰符通常和 static 修饰符一起使用来创建类常量。 关于final,首先想到的是一旦赋值后不... -
Java—初学—String的特点:一旦被赋值,则不能被改变
2018-04-30 15:42:31一旦被赋值,不能被改变是指,值不能改变,而不是引用。=============================面试题package com.gaowei_06; /* * 面试题: * String s = new String("Hello")与String s = "hello"... -
Java开发笔记(三十四)字符串的赋值及类型转换
2021-02-12 13:04:47不管是基本的char字符型,还是包装字符类型Character,它们的每个变量只能存放一个字符,无法满足对一串...例如给字符串变量赋初始值,就有多达四种的赋值形式(包装类型只有三种赋值),分别介绍如下:1、被双引号... -
Java 基础(构造器,属性赋值先后顺序)
2021-02-12 21:00:47创建对象初始化对象的属性说明:如果没有显式的定义类的构造器的话,则系统默认提供一个空参的构造器定义构造器的格式: 权限修饰符 类名(行参列表){}一个类中定义的多个构造器,彼此构成重载一旦我们显示的定义了类的... -
java中 ++前后差别试题及静态变量一旦赋值不可改变
2017-05-20 20:57:00package javaTest; public class Increment { private static int k=0; public static void main(String[] args) { int j=0; int n=0; for(int i=0;i<100 ;i++){ j=j++; k=k++; n=++n; ... -
java中String类型变量的赋值问题
2017-06-03 14:04:53解说:java 中String是 immutable的,也就是不可变,一旦初始化,引用指向的内容是不可变的(注意:是内容不可变)。 也就是说,假设代码中有String str = “aa”;str=“bb”;,则第二条语句不是改变“aa”原来... -
Java中的循环笔记整理(必看篇)
2021-04-18 00:37:25一、循环的类型: 1、for循环 ? 运行结果: 2、while() {} ? 运行结果: 3、do{}... 以上这篇java中的循环笔记整理(必看篇)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。 -
java String方法入参赋值问题分析
2020-07-13 18:27:32我们来画图分析一下: 图1:方法入参时jvm图 图2:change方法中str赋值后jvm图 从图中我们可以看出,图1的时候,也就是change方法入参的时候,change(String str, char ch[])中str的内存指向是和String str = new ... -
Java面向对象之Object类
2021-03-17 21:15:45(Object类是所有类的父类)当我们不希望在程序中某些类被继承,某些方法被重写,某些数据被修订。就是final关键字闪亮登场的时候了。一个类没有使用extends关键字明确标识继承关系,则默认继承Object类(包括数组)Java... -
《java入门》第一季之类(String类字符串一旦被赋值就没法改变)
2016-05-09 13:07:40毫无疑问,String类是java里面最重要的类之一。因此它有很多方法需要了解和掌握。 -
常见对象_String的特点一旦被赋值就不能改变
2016-11-05 23:52:58* 字符串特点:字符串是常量,一但被赋值,就不能被改变。 */ public class StringDemo { public static void main(String[] args) { String s = "hello"; // s = s+"world"; // s = helloworld s += "wo -
字符串是常量,一旦被赋值,就不能被改变
2017-11-05 16:28:41Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。 字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。 -
详解 Java 内部类
2021-03-06 18:10:33内部类在 Java 里面算是非常常见的一个功能了,在日常开发中我们肯定多多少少都用过,这里总结一下关于 Java 中内部类的相关知识点和一些使用内部类时需要注意的点。从种类上说,内部类可以分为四类:普通内部类、... -
数组初始化与赋值
2021-02-12 11:04:06数组初始化与赋值2009-09-17如果有几个object,他们的类型是相同的。创建它们的时候,它们可能在堆里的各个散落位置产生,这样的话,存取效率就会不高。既然它们的类型是相同的,那么我们可以用连续的堆空间来存放... -
Java数组的创建和初始化(赋值)
2020-09-21 19:19:23大家好,我是大黄,这次我来说一下Java中的数组。首先先简单介绍一下什么是数组,以及数组有哪些特点。 一、数组的基本概念 数组就是用来存储一组相同数据类型的数据的容器,作用是跟集合差不多,只不多集合中的数据... -
Java数组定义赋值及switch的使用
2017-03-08 20:54:44Java的数组初始化赋值 (一)方法一: 创建数组后,通过循环对数组赋值。 例如代码: int [] nums = new int [100]; for(int i=0;i nums[i] = i; } (二)方法二: 例如代码: int [] nums = {0,1,2,3... -
Java-关键字final详解(public static final)
2020-12-20 23:33:26一、final修饰类 ...final修饰的变量一旦赋上值就不能再重新赋值了。 (2)fina修饰的变量如果这个变量是一个”引用”会怎么样? 解析:s2里面最初分配了0x123,然而你再给final进行赋值就不行了,因 -
Java数组的三种初始化方式
2021-02-12 11:04:06Java语言中数组必须先初始化,然后才可以使用。所谓初始化就是为数组的数组元素分配内存空间,并为每个数组元素附初始值。注意:数组完成初始化后,内存空间中针对该数组的各个元素就有个一个默认值:基本数据类型的... -
Java中类与对象的介绍
2021-02-28 18:06:505)一旦编写了至少一个构造方法,那么编译器的默认构造方法就不会被使用。 6)构造方法也可以重载。 2-04.如何定义一个标准的类 一个标准的类通常需要拥有以下四个部分: 1)所有的成员变量都需要使用private关键字... -
Java内存管理-探索Java中字符串String(十二)
2019-05-04 23:18:39Java内存管理-你真的理解Java中的数据类型吗(十) 11、 Java内存管理-Stackoverflow问答-Java是传值还是传引用?(十一) 12、 Java内存管理-探索Java中字符串String(十二) 实战 一文学会Java死锁和CPU... -
浅谈java对象引用及对象赋值
2017-01-05 15:11:46一、Java对象及其引用 初学Java,总是会自觉或不自觉地把Java和C++相比较。在学习Java类与对象章节的时候,发现教科书和许多参考书把对象和对象的引用混为一谈。可是,如果分不清对象与对象引用, 那实在没法很... -
有关Java中关键字final的理解
2020-12-22 20:50:47在Java编程语言中,有时候需要告知编译器一段数据是不变的编译期常量。对于这种情况,编译器可以将此常量值带入需要用到它的计算式子当中,这种在编译时执行计算式的方法减轻了运行时的开销。通常,这类常量数据... -
Java教程:Java一维数组的定义、赋值和初始化
2020-12-31 13:15:50Java教程当数组中每个元素都只带有一个下标时,这种数组就是“一维数组”。一维数组(one-dimensional array)实质上是一组相同类型数据的线性集合,是数组中最简单的一种数组。 数组是引用数据类型,引用数据类型在... -
关于java String的引用和创建、赋值过程
2016-06-12 17:55:51关于java中String的引用和创建、赋值过程的讲解 -
java中final关键字,修饰变量、引用、类、方法、实例变量的问题
2022-03-15 11:24:04final修饰的局部变量一旦赋值就不能再次赋值,只能赋值一次。若是再次赋值会报错; 实例变量: final修饰实例变量,也是只能赋值一次。 final修饰的实例变量,系统不会赋默认值,必须程序员手动赋值。如果不手动... -
java中长整型定义
2021-03-09 02:43:33展开全部java整型有四种分贝是:byte(1字节)、short(2字节)、int(4字节)、long(8字节)0x100080000000超出范围,其实不是long不能保存这么大,而是这个数是个int型数。它超出的其实是int的范围(The literal 0x...