string-String 引用变量的相关问题

问题描述

String 引用变量的相关问题

package test02;

public class Test09 {
public static void main (String [] args){
String str = "12345";
change(str);
System.out.println(str);
}
public static void change(String str){
str="welcome";
}

}
为什么是12345

解决方案

String str = "12345";这里可以看成是值类型传递,形参改变,实参不会改变。

解决方案二:

string永远是只读的,你不能改变string,你重新赋值或者任何计算,都会创建新的String对象,并且指向它。
所以str="welcome";把形参指向了新的welcome的引用上,而不是改变str实参的内容。

解决方案三:

 看如下代码:
class A
{
    public int x;
}

void change1(A a)
{
    a = new A();
        a.x = 123; //指向新的对象,再改变,不影响原来的对象
}
void change2(A a)
{
    a.x = 123; //修改对象的状态,会影响
}

解决方案四:

变得是形参,不是实参

解决方案五:

[java]String变量的内存分配问题

解决方案六:

字符串“12345”存在一个地址,"welcome",存在另一个地址,main中的str存在一个栈内存中指向"12345"的地址,change中的str存在栈内存的另一个位置,调用change使得,change中str变量同样指向了"12345"所在的地址,执行str="welcome"时,使得change中的str指向了字符串池中"welcome"的地址

解决方案七:

String对象是不可变的,当把String对象当做参数传递给方法时,Java都会复制一份引用(也就是局部引用,比如你这里的change(String str)中的str)其实跟你main方法中的str是不一样的,内容虽然一样,但是内存地址是不一样的。你改变的只是局部引用指向的新内容welcome,而main方法中的str是没有重新指向welcome的。

时间: 2024-10-30 05:34:58

string-String 引用变量的相关问题的相关文章

c++-C++中字符数组转 string类引用问题

问题描述 C++中字符数组转 string类引用问题 函数定义: void fun(const string &s){ cout<<s<<endl; } 如果调用fun("hello"),可以正确编译.但是如果把函数定义中的const去掉,则不能正确编译. 问字符数组"hello"是通过什么方式装换成const string &类型的,是某种强制转换吗? 我再C++ primer里没找到相关说明,如有知道的说明下哪本书,那页有

c++-在头文件里定义一个string name; 变量,编译报错

问题描述 在头文件里定义一个string name: 变量,编译报错 //Parent.h class Parent { public: Parent(void); ~Parent(void); private: string name; }; //main.cpp #include #include #include "Parent.h" using namespace std; void main() { system("pause"); } //Parent.

c c++ string-c++ string类型的变量赋值是浅拷贝还是深拷贝?

问题描述 c++ string类型的变量赋值是浅拷贝还是深拷贝? string str1 = "123453"; string str2 = str1; str1和str2的内存地址是相同的吗?str2中某一字符值的改变会影响到str1吗? 解决方案 不同.string 有自己的构造函数来分配空间. 所以不会影响 解决方案二: 浅拷贝还是深拷贝这是对于指针来说的,基本变量是没有这一说的,都是直接分配一个新的内存给它. 所以不会有影响的 解决方案三: string类是stl类,已经封装好

hql-怎么在sql语句的String里定义变量

问题描述 怎么在sql语句的String里定义变量 如String hql ="from Book as book where book.bookNo = [变量]" Query query = session.createQuery(hql); 字符串hql该怎么写呢? 解决方案 declare 变量名 varchar(255); #非数字变量 declare 变量名 int; #数字变量 select * from book where book.bookNo = 变量名: 解决方

java-Java里面String.format全角空格相关

问题描述 Java里面String.format全角空格相关 Java里面String.format里面的全角空格代码哪位大神知道,我想往一个指定长度的字符串后面补全角空格! 解决方案 public static void main(String[] args) { String pattern=""; for(int i=0;i<20;i++){//这里的固定字符串长度是20 pattern = pattern + " "; } String kk = &q

区分java中String+String和String+char_java

我们来考虑一个关于java中String的问题: "abc" + '/'和 "abc" + "/"的区别. 通过这个例子, 我们可以顺便练习一下JDK工具中javap的用法, 原问题是这样的: 把斜杠/当作字符或字符串有什么区别呢? 一个是当作基本数据类型char,一个是对象String.具体有什么区别呢? 当作字符效率会更高吗?String str = "abc" + '/';和String str = "abc&

Java千百问_06数据结构(015)_数组和普通对象的引用变量有什么区别

1.数组和普通对象的引用变量有什么区别 了解什么是数组看这里:java中的数组是什么  对于Java的数组来说,只有类型兼容(即属于同一数据类型体系且遵守优先级由低到高原则),才能将数组引用传递给另一数组引用,但仍然不能改变数组长度(仅仅只是调整数组引用指针的指向).  了解数组传递看这里:数组如何传递 public class TestArrayLength { public static void main(String[] args) { int[] numbers = { 3, 5, 1

请问“引用变量保持用于引用对象的位”这句话是什么意思?

问题描述 请问"引用变量保持用于引用对象的位"这句话是什么意思? 请问"引用变量保持用于引用对象的位"这句话是什么意思??????????????????????????? 解决方案 "位"?翻译错误吧,应该是"地址"或"指针"比较正确. 解决方案二: 引用变量就是对被引用变量的一个副本,它可以访问变量.

c++-C++引用变量问题,函数中临时变量返回引用

问题描述 C++引用变量问题,函数中临时变量返回引用 C++ primer plus第六版引用一节,说不能在函数中新建一个变量,并将其引用返回.道理我都懂,就是说函数调用完后,那部分临时内存会释放.可是为什么我自己写的下述代码不报错,反而能正常运行呢? #include using namespace std; struct free_throws //此处定义一个结构体 { int i; }; const free_throws & clone2(free_throws & ft1, f